[英]java documentlistener
我正在嘗試在更改JTextField的文本后調用方法。
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上調用此方法時,它可以正常工作。 但是當我在文本字段中更改文本時,沒有任何反應。 甚至印刷品。 有什么建議?
問題解決了。 僅當其他屬性(字體,大小,而不是文本)發生更改時,才會調用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));
}
});
嘗試使用ActionListener
:
textField.addActionListener(this);
...
public void actionPerformed(ActionEvent evt) {
String s = textField.getText();
System.out.println(s);
...
}
我發現這個解決方案最快:
new JTextPane().addActionListener(new Key());
class Key extends KeyAdapter{
private static final Object lock = new Object();
private static int keydiff=0;
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode())
{
//IGNORE FUNCTIONAL KEYS
case 38 :
case 39 :
case 37 :
case 40 :
case 17 :
case 157 :
case 10 : break;
default : keydiff++;
}
if(keydiff!=0)
{
synchronized(lock){
keydiff=0;
//EVENT FIRED HERE
}
}
}
}
它比以下快得多:
.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));
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.