本文介绍了Java Swing的1.6的TextInput如Firefox吧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想创建一个textwidget /组件至极看起来像Firefox地址栏中。我的意思是文本字段至极让我把里面的字段小按钮(例如取消/重装/...)
我试图定制的JLayeredPane,通过创建最大化文本字段定制的布局管理器,并从右至左放置其余部分。我的问题是这样了绘画的问题,我不会总是看到我添加了文本字段的项目。这可能是Jython的关系,我尝试suppling java.lang.Integer中的(1)
到 JLayeredPane.add
。然而,图层排序正好相反的文件说什么。
要cricumvent这个我得出我自己的的JLayeredPane
类,并重新定义了油漆
调用 paintComponents
这反过来又遍历所有的组件,并调用其绘制方法,从文本框,其余其后。
不过,我并不总是得到更新向右走,这意味着按钮隐藏/只显示部分,我不能用按钮进行交互。
- 什么我都实际上可以在屏幕上看到此更新(它是在一个缓冲区隐藏?))
- 我怎样才能让这个我可以用按钮交互?
- 如何缩短Texxtfield,使文本开始滚动至前前我到了文本字段的结束,使文本没有得到通过按钮隐藏?我仍然希望文本框区域中的按键延长
修改:在我使窗口变小,之后,它也可点击该按钮只显示在正确的地方。
EDIT2 :
我把自由熬下来回答这个,隐藏走了很多的按钮code /不必要的东西。
进口java.awt中的*。
进口java.awt.event.ItemEvent中;
进口java.awt.event.ItemListener;
进口的javax.swing *。公共类操场{ 私人图标errorIcon = UIManager.getIcon(OptionPane.errorIcon);
私人图标infoIcon = UIManager.getIcon(OptionPane.informationIcon);
私人图标warnIcon = UIManager.getIcon(OptionPane.warningIcon); 公共运动场(){
的JPanel面板=新JPanel();
panel.setLayout(新的BorderLayout()); panel.add(makeButton(),BorderLayout.WEST); JTextField的文本=新的JTextField(20);
text.setBorder(NULL);
panel.add(文字,BorderLayout.CENTER);
JPanel的buttonsPanel =新JPanel();
buttonsPanel.setOpaque(假);
buttonsPanel.setLayout(新的GridLayout(1,2,2,2)); buttonsPanel.add(makeButton());
buttonsPanel.add(makeButton()); panel.add(buttonsPanel,BorderLayout.EAST);
panel.setBackground(text.getBackground()); 的JMenuBar菜单栏=新的JMenuBar();
menuBar.add(面板);
menuBar.add(Box.createHorizontalGlue());
JFrame的帧=新的JFrame(MenuGlueDemo);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(菜单栏);
frame.pack();
frame.setVisible(真);
} 公共JToggleButton中makeButton(){
最后JToggleButton中按钮=新JToggleButton中();
button.setFocusable(假);
button.setMargin(新插图(0,0,0,0));
button.setContentAreaFilled(假);
button.setBorder(NULL); button.setIcon((errorIcon));
button.setRolloverIcon((infoIcon));
button.setSelectedIcon(warnIcon);
button.set pressedIcon(warnIcon); button.addItemListener(新的ItemListener(){ @覆盖
公共无效itemStateChanged(一个ItemEvent E){
如果(button.isSelected()){
}其他{
}
}
}); 返回按钮;
} 公共静态无效的主要(字串[] args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){ @覆盖
公共无效的run(){
操场menuGlueDemo =新操场();
}
});
}
}
解决方案
可能是它可以使用的,用的例如:
进口java.awt.ComponentOrientation中;
进口的javax.swing *。公共类MenuGlueDemo { 公共MenuGlueDemo(){
的JMenuBar菜单栏=新的JMenuBar();
menuBar.add(createMenu(菜单1));
menuBar.add(createMenu(菜单2));
menuBar.add(createMenu(菜单3));
menuBar.add(新JSeparator的());
menuBar.add(的新的JButton(SEACH ....));
menuBar.add(新的JTextField(SEACH ....));
menuBar.add(新JComboBox中(新的对象[] {高度,长度,卷}));
menuBar.add(Box.createHorizontalGlue());
menuBar.add(createMenu(关于));
JFrame的帧=新的JFrame(MenuGlueDemo);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(菜单栏);
frame.pack();
frame.setVisible(真);
} 公共JMenu的createMenu(字符串名称){
JMenu的M =新JMenu,(职称);
m.add(+标题,在菜单项#1);
m.add(菜单项#2+称号);
m.add(+标题,在菜单项#3);
如果(title.equals(关于)){
m.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
返回米;
} 公共静态无效的主要(字串[] args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){ @覆盖
公共无效的run(){
MenuGlueDemo menuGlueDemo =新MenuGlueDemo();
}
});
}
}
修改
with proper LayoutManager
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();
}
});
}
}
这篇关于Java Swing的1.6的TextInput如Firefox吧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!