我试图编写一个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

10-05 18:29