我有一个编辑的JComboBox和JTextField中。 这两种自定义文件。 下面是代码:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class SwingUtilStrangeBehav extends JFrame {
public SwingUtilStrangeBehav() {
JComboBox<String> combo = new JComboBox<>(new String[]{"a", "b", "c"});
combo.setEditable(true);
((JTextField)combo.getEditor().getEditorComponent()).setDocument(new PlainDocument() {
private static final long serialVersionUID = 1L;
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
System.out.println("New text inserted into combo!");
super.insertString(offs, str, a);
}
});
JTextField field = new JTextField();
field.setDocument(new PlainDocument() {
private static final long serialVersionUID = 1L;
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
System.out.println("New text inserted into text!");
super.insertString(offs, str, a);
}
});
Container c = getContentPane();
c.setLayout(new BoxLayout(c, BoxLayout.PAGE_AXIS));
c.add(combo);
c.add(Box.createRigidArea(new Dimension(0, 5)));
c.add(field);
//SwingUtilities.updateComponentTreeUI(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String arg[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SwingUtilStrangeBehav();
}
});
}
}
然后我输入一些文字中的JComboBox或JTextField中我得到了我的控制台下面的输出,例如:
新文本插入组合!
新文本插入文本!
那很棒! 当我去掉下面行的SwingUtilities.updateComponentTreeUI(本); 并运行此PROGRAMM,我只能得到这样的输出:
新文本插入文本!
看来,JcomboBox的文档已被删除。 为什么自定义的文件删除,如何解决这个问题呢? 我想是自定义文档仍然会在JComboBox中执行SwingUtilities.updateComponentTreeUI(本)之后; 。
FYI:我用SwingUtilities.updateComponentTreeUI(本); 新的字体应用到集装箱。