java文档监听器
我试图在更改JTextField的文本后调用方法java文档监听器,java,swing,jtextfield,documentlistener,Java,Swing,Jtextfield,Documentlistener,我试图在更改JTextField的文本后调用方法 textField.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent arg0) { System.out.println("IT WORKS"); panel.setP
textField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent arg0)
{
System.out.println("IT WORKS");
panel.setPrice(panel.countTotalPrice(TabPanel.this));
}
public void insertUpdate(DocumentEvent arg0)
{
}
public void removeUpdate(DocumentEvent arg0)
{
}
});
当我在另一个ActionListener调用此方法时,它工作正常。但当我在文本字段中更改文本时,什么也没发生。甚至是普林顿。有什么建议吗?尝试使用
ActionListener
:
textField.addActionListener(this);
...
public void actionPerformed(ActionEvent evt) {
String s = textField.getText();
System.out.println(s);
...
}
问题解决了。changedUpdated方法仅在其他属性(字体、大小,但不是文本)更改时调用。要在每次更改文本后调用方法,我应该将调用放入insertUpdate和removeUpdate方法中。这样:
textField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent arg0)
{
}
public void insertUpdate(DocumentEvent arg0)
{
System.out.println("IT WORKS");
panel.setPrice(panel.countTotalPrice(TabPanel.this));
}
public void removeUpdate(DocumentEvent arg0)
{
System.out.println("IT WORKS");
panel.setPrice(panel.countTotalPrice(TabPanel.this));
}
});
我发现这个解决方案最快:
new JTextPane().addActionListener(new Key());
它比:
.getDocument().addDocumentListener( .... changeUpdate())
这是解决你问题的另一个办法。不必在每个方法下重复相同的代码,您可以创建一个方法并为changedUpdate、insertUpdate、removeUpdate调用该方法
textField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent arg0)
{
printMyLines();
}
public void insertUpdate(DocumentEvent arg0)
{
printMyLines();
}
public void removeUpdate(DocumentEvent arg0)
{
printMyLines();
}
private void printMyLines()
{
System.out.println("IT WORKS");
panel.setPrice(panel.countTotalPrice(TabPanel.this));
}
});
您是否试图更改
文本字段中的值?如果是这样的话,你就不能,因为文档监听器不能更改它们被分配到的文本字段中的值。这有点可疑。如果以后可以在不使用键盘的情况下更改字段内容,该怎么办?(如“重置字段”按钮或撤消)复制和粘贴如何?使用正确的方法更安全。
textField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent arg0)
{
printMyLines();
}
public void insertUpdate(DocumentEvent arg0)
{
printMyLines();
}
public void removeUpdate(DocumentEvent arg0)
{
printMyLines();
}
private void printMyLines()
{
System.out.println("IT WORKS");
panel.setPrice(panel.countTotalPrice(TabPanel.this));
}
});