我想创建一个textwidget /组件至极看起来像Firefox地址栏中。 我的意思是一个文本框至极让我把小按钮里面的字段(例如,取消/恢复/ ...)
我尝试定制的JLayeredPane,创造最大化的文本字段的自定义布局管理器,并从右到左放置剩余部分。 我的问题是,这给了绘画的问题,我不会总是看到我添加了文本字段的项目。 这可能是Jython的关系,我尝试suppling java.lang.Integer(1)
至JLayeredPane.add
。 然而图层进行排序正好相反的文件说什么。
TO cricumvent这个我得出我自己JLayeredPane
类,并重新paint
调用paintComponents
这反过来又遍历所有的组件,并调用其绘制方法,随后开始与文本框,其余。
不过,我并不总是得到更新向右走,这意味着按钮隐藏/只显示部分,我不能用按钮交互。
- 什么我不得不实际上可以看到屏幕上的更新(是隐藏在缓冲区?))
- 我怎样才能让这个我可以用按钮交互?
- 我怎样才能缩短Texxtfield,使得文本开始滚动到前面之前,我到达文本字段,以便文本没有得到通过按钮隐藏的结束? 我还是想在文本框区域中的按键延伸
编辑 :在我使窗口小按钮只显示在正确的地方,在那之后,也可点击
EDIT2:我把自由煮沸的回答到这一点,这隐藏了很多的那个按钮的代码/不必要的东西
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class playground {
private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
public playground() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(makeButton(), BorderLayout.WEST);
JTextField text = new JTextField(20);
text.setBorder(null);
panel.add(text, BorderLayout.CENTER);
JPanel buttonsPanel = new JPanel();
buttonsPanel.setOpaque(false);
buttonsPanel.setLayout(new GridLayout(1, 2, 2, 2));
buttonsPanel.add(makeButton());
buttonsPanel.add(makeButton());
panel.add(buttonsPanel, BorderLayout.EAST);
panel.setBackground(text.getBackground());
JMenuBar menuBar = new JMenuBar();
menuBar.add(panel);
menuBar.add(Box.createHorizontalGlue());
JFrame frame = new JFrame("MenuGlueDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(menuBar);
frame.pack();
frame.setVisible(true);
}
public JToggleButton makeButton() {
final JToggleButton button = new JToggleButton();
button.setFocusable(false);
button.setMargin(new Insets(0, 0, 0, 0));
button.setContentAreaFilled(false);
button.setBorder(null);
button.setIcon((errorIcon));
button.setRolloverIcon((infoIcon));
button.setSelectedIcon(warnIcon);
button.setPressedIcon(warnIcon);
button.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (button.isSelected()) {
} else {
}
}
});
return button;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
playground menuGlueDemo = new playground();
}
});
}
}
可能是它可以通过使用简单的JMenuBar ,具有自动完成组合框/ JFextField例如
import java.awt.ComponentOrientation;
import javax.swing.*;
public class MenuGlueDemo {
public MenuGlueDemo() {
JMenuBar menuBar = new JMenuBar();
menuBar.add(createMenu("Menu 1"));
menuBar.add(createMenu("Menu 2"));
menuBar.add(createMenu("Menu 3"));
menuBar.add(new JSeparator());
menuBar.add(new JButton(" Seach .... "));
menuBar.add(new JTextField(" Seach .... "));
menuBar.add(new JComboBox(new Object[]{"height", "length", "volume"}));
menuBar.add(Box.createHorizontalGlue());
menuBar.add(createMenu("About"));
JFrame frame = new JFrame("MenuGlueDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(menuBar);
frame.pack();
frame.setVisible(true);
}
public JMenu createMenu(String title) {
JMenu m = new JMenu(title);
m.add("Menu item #1 in " + title);
m.add("Menu item #2 in " + title);
m.add("Menu item #3 in " + title);
if (title.equals("About")) {
m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
return m;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MenuGlueDemo menuGlueDemo = new MenuGlueDemo();
}
});
}
}
编辑
我可以简单,但文本输入,并在容器中的一些按钮具有适当的布局和实现[文本字段...] [B1] [B2]但我想[文本字段[B1] [B2]
适当布局管理
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class MenuGlueDemo {
private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
public MenuGlueDemo() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JButton button = new JButton();
button.setFocusable(false);
//button.setMargin(new Insets(0, 0, 0, 0));
button.setContentAreaFilled(false);
button.setIcon((errorIcon));
button.setPressedIcon(warnIcon);
panel.add(button, BorderLayout.WEST);
JTextField text = new JTextField(20);
text.setBorder(null);
panel.add(text, BorderLayout.CENTER);
JPanel buttonsPanel = new JPanel();
buttonsPanel.setOpaque(false);
buttonsPanel.setLayout(new GridLayout(1, 2, 2, 2));
final JToggleButton toggleButton = new JToggleButton();
toggleButton.setFocusable(false);
toggleButton.setMargin(new Insets(0, 0, 0, 0));
toggleButton.setContentAreaFilled(false);
toggleButton.setIcon((errorIcon));
toggleButton.setRolloverIcon((infoIcon));
toggleButton.setSelectedIcon(warnIcon);
toggleButton.setPressedIcon(warnIcon);
toggleButton.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (toggleButton.isSelected()) {
} else {
}
}
});
buttonsPanel.add(toggleButton);
final JToggleButton toggleButton1 = new JToggleButton();
toggleButton1.setFocusable(false);
toggleButton1.setMargin(new Insets(0, 0, 0, 0));
toggleButton1.setContentAreaFilled(false);
toggleButton1.setIcon((errorIcon));
toggleButton1.setRolloverIcon((infoIcon));
toggleButton1.setSelectedIcon(warnIcon);
toggleButton1.setPressedIcon(warnIcon);
toggleButton1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (toggleButton1.isSelected()) {
} else {
}
}
});
buttonsPanel.add(toggleButton1);
panel.add(buttonsPanel, BorderLayout.EAST);
panel.setBackground(text.getBackground());
JMenuBar menuBar = new JMenuBar();
menuBar.add(createMenu("Menu 1"));
menuBar.add(createMenu("Menu 2"));
menuBar.add(createMenu("Menu 3"));
menuBar.add(new JSeparator());
menuBar.add(new JButton(" Seach .... "));
menuBar.add(panel);
menuBar.add(new JComboBox(new Object[]{"height", "length", "volume"}));
menuBar.add(Box.createHorizontalGlue());
menuBar.add(createMenu("About"));
JFrame frame = new JFrame("MenuGlueDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(menuBar);
frame.pack();
frame.setVisible(true);
}
private JMenu createMenu(String title) {
JMenu m = new JMenu(title);
m.add("Menu item #1 in " + title);
m.add("Menu item #2 in " + title);
m.add("Menu item #3 in " + title);
if (title.equals("About")) {
m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
return m;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MenuGlueDemo menuGlueDemo = new MenuGlueDemo();
}
});
}
}
您可能能够适应所示的方法组件边框 ,它允许“一个JTextField
和JButton
共同努力。” 相关文章文字提示也可以证明是有用的。 最后,考虑JToolBar
,说明在这里 ,作为一个灵活的方式把组件连接在一起。