私はJTextComponentを持っており、ユーザーがそのJTextComponentのテキストの編集を一定期間停止するとメソッドを呼び出す必要があります。私は、モデルが変更されるたびにタイマーを開始し、別のテキスト編集が到着したらキャンセルすることを考えていましたが、それは私に最高の欲望ではないと感じています。あなたはそのような振る舞いをどのように実装するのか経験を共有できますか?テキストコンポーネントのコンテンツがしばらく編集されていないときにメソッドを呼び出す
2
A
答えて
4
はい、これはおそらく最良の決定です。タイマーをキャンセルするのではなく、むしろrestart()
をDocumentListenerからタイマーに呼び出すだけです。
例えば、編集が2秒以上非アクティブになっている場合のJTextFieldの背景が赤に変わりプログラム:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
@SuppressWarnings("serial")
public class ResetCounter2 extends JPanel {
private static final int TIMER_DELAY = 2000; // 2 seconds
public static final Color LATE_BACKGROUND = Color.RED;
private JTextField textField = new JTextField(10);
private Timer timer = new Timer(TIMER_DELAY, new TimerListener());
public ResetCounter2() {
textField.getDocument().addDocumentListener(new MyDocListener());
add(textField);
// make sure timer does not repeat and then start it
timer.setRepeats(false);
timer.start();
}
private class MyDocListener implements DocumentListener {
@Override
public void changedUpdate(DocumentEvent e) {
docChanged();
}
@Override
public void insertUpdate(DocumentEvent e) {
docChanged();
}
@Override
public void removeUpdate(DocumentEvent e) {
docChanged();
}
private void docChanged() {
textField.setBackground(null);
timer.restart();
}
}
private class TimerListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
textField.setBackground(LATE_BACKGROUND);
}
}
private static void createAndShowGui() {
ResetCounter2 mainPanel = new ResetCounter2();
JFrame frame = new JFrame("ResetCounter");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
createAndShowGui();
});
}
}
+0
あなたの考えとサンプルプログラムに感謝します – polis
関連する問題
- 1. Javafxテーブルビューの編集メソッドがcellfactoryを呼び出さない
- 2. 編集モードのときにios didselectrowatindexpathが呼び出されない
- 3. 陰影付きメソッドが呼び出されていない
- 4. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 5. CellForRowAtIndexメソッドが呼び出されない
- 6. Ios:Delegeteメソッドが呼び出されない
- 7. メソッドonHandleIntent()が呼び出されない
- 8. おそらく定義されていないメソッドを呼び出すaddEventListener
- 9. NSComboBoxアイテム値がLeopard(10.5)で編集された後にメソッドを呼び出す
- 10. NHibernate:カスタムプロパティアクセサのGetメソッドとSetメソッドが呼び出されない
- 11. ListPreferencesが変更されたときにonPreferenceChangeメソッドが呼び出されない
- 12. 単体テスト中にメソッド呼び出しが試行されたが、実際には呼び出していないが、実際には呼び出さない
- 13. Iphone:Popoverコントローラを使用しているときにメソッドが呼び出していないと表示される
- 14. Mockito - 協力者のメソッドが呼び出されていないことを確認してください。
- 15. onReceiveが呼び出されないときに呼び出される
- 16. メソッドがラムダで呼び出されたときにブレークポイントがヒットしない
- 17. UITextViewDelegateメソッドが呼び出されていない(UITableViewCell内のUITextView)
- 18. viewWillDisplayearがpopToRootViewControllerAnimatedを呼び出すときに呼び出されない
- 19. メソッドが呼び出されたときにUIViewが正しく表示されない
- 20. Objective Cではメソッドを呼び出すクラスと、呼び出さないメソッドのみを呼び出す方法を教えてください。
- 21. コンテキストメニューmenuitemが正しく呼び出されていない
- 22. htc desireでonCompleteメソッドが呼び出されていない
- 23. NSXMLParserDelegateメソッドが呼び出されていない
- 24. pythonで呼び出されたときにbalance()メソッドが機能しない
- 25. onResume()メソッドが同じアクティビティから呼び出していない
- 26. struts2でメソッドのメソッドが呼び出されない
- 27. NSComboBoxCellテキストが編集されたときにメソッドを呼び出すにはどうすればよいですか?
- 28. getElementsByClassNameを使用しているときにinnerHTMLが呼び出されない
- 29. loadViewを使用しているときにviewDidLoadが呼び出されない
- 30. なぜnewObjectメソッドが呼び出されないのですか?
答えるように編集を参照してください。 –