我试图编写一个DocumentListener以便将更改捕获到textField中。
我有一个面板,其中包括另一个面板,其中我放置了textField,我尝试了很多公式,但是没有用
这是面板
public JPanelTASAS() {
initComponents();
txtTASA.getDocument().addDocumentListener(new BecomingYellowDocumentListener(txtTASA));
}
private static class BecomingYellowDocumentListener implements DocumentListener {
private utilesGUIx.JTextFieldCZ textField;
public BecomingYellowDocumentListener(utilesGUIx.JTextFieldCZ textField) {
this.textField = textField;
}
@Override
public void insertUpdate(DocumentEvent e) {
textField.setBackground(Color.yellow);
System.out.println("Prueba");
}
@Override
public void removeUpdate(DocumentEvent e) {
textField.setBackground(Color.yellow);
System.out.println("Prueba");
}
@Override
public void changedUpdate(DocumentEvent e) {
textField.setBackground(Color.yellow);
System.out.println("Prueba");
}
}
下一个是主要小组,其他小组也包括在内
public JPanelTRANSMISIONES() {
initComponents();
anadirPaneles();
}
在initComponents中包含此代码
jPanelTASAS1 = new gestionTrafico.forms.JPanelTASAS();
并记录utilesGUIx.JTextFieldCZ的代码
public JTextFieldCZ() {
super();
enableEvents(AWTEvent.FOCUS_EVENT_MASK);
enableEvents(AWTEvent.KEY_EVENT_MASK);
setDocument(createDefaultModel());
}
public void setDocument(Document doc) {
if (doc != null) {
doc.putProperty("filterNewlines", Boolean.TRUE);
}
super.setDocument(doc);
}
为了清楚起见,如果将此侦听器应用于“主体面板”的JTextField可以正常工作,我认为问题在于将文档侦听器添加到另一个面板内部的面板中。可能吗 ?
预先非常感谢您的帮助
编辑:我意识到,如果我更改文本字段硬编码的值,则文档侦听器将起作用。但是,如果我更改面板中文本字段的值,则不会。
最佳答案
猜猜:您的问题很简单,只是更改背景不会自动触发受影响的UI元素的重绘。
换句话说:您可能会在stdout上看到这些消息;但要更改用户界面,应在框架或面板上调用repaint()
。
有关常见绘画问题的一些常见解决方案,请参见here。
但是根据您的最新评论,您甚至还没有到位。我想您必须更仔细地研究使用DocumentListener的细节,例如通过研究here。