Bir JTextComponent'im var ve kullanıcı bir metin için JTextComponent içinde metni düzenlemeyi durdurduğunda bir yöntemi çağırmak istiyorum. Başka bir metin düzenlemesi geldiğinde, modelin her değiştirilişinde bir zamanlayıcıyı başlatmayı düşünüyordum, ancak bu bana en iyi açıklama olmadığını hissettiriyor. Bu tür davranışları nasıl uygulayacağınız konusunda deneyimlerinizi paylaşır mısınız?Metin bileşeninin içeriği bir süredir düzenlenmediğinde bir yöntem çağırın.
2
A
cevap
4
Evet, bu muhtemelen en iyi karardır. Zamanlayıcıyı iptal etmiyorsunuz, ancak Zamanlayıcıda DocumentListener içinden restart()
'u aramanız yeterlidir. örneğin
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
Düşünceleriniz ve örnek programınız için teşekkür ederiz. – polis
İlgili konular
- 1. Spring @PreAuthorize özel bir yöntem çağırın
- 2. C# Yeni bir iş parçacığında bir yöntem çağırın
- 3. Bir .net projesinden python projesinde bir yöntem çağırın.
- 4. İçeriği olmayan bir metin kutusunun JQuery klonu
- 5. Java'da bu sınıfın herhangi bir yöntem çağrılmasından önce bir yöntem çağırın.
- 6. Yansıma yoluyla isteğe bağlı params yöntemini kullanarak bir yöntem çağırın
- 7. Kurucunun içinde arama yapmadan sınıfta bir yöntem çağırın
- 8. Tasarruf tinymce textarea içeriği bir süredir ancak henüz başarılı olamadı bir .txt dosyasına tinymce editörü textarea içeriği kurtarmaya çalışırken edilmiştir
- 9. React Native: Metin bileşeninin satır sayısını belirleme
- 10. javascript'te bir URL'yi çağırın.
- 11. HTML'den bir sınıf yöntemini çağırın.
- 12. 10 Bir Bağdaştırıcıdan bir Fragment yöntemini çağırın.
- 13. Bir C# uygulaması ne kadar süredir çalışıyor?
- 14. Bu Telerik Radgrid neden bir süredir çalışıyor?
- 15. Bir UILabel içeriği
- 16. WP7: Bir pop-up + içeriği mi döndürüyorsunuz?
- 17. Flask uzun süredir global kaynaklar
- 18. Koşullu olarak bir işlevi çağırın
- 19. Sadece bir kez işlev çağırın
- 20. Bir C++ işlevini Swift'den çağırın.
- 21. scrapy: Örümcek kapandığında bir işlev çağırın
- 22. Bir işlevin içinde bir nesne çağırın
- 23. VBA'da farklı bir Modülden bir Altprogram çağırın
- 24. Başka bir Servis'ten AngularJs denetleyici yöntemini çağırın
- 25. Bootstrap kullanarak sekme bileşeninin sonunda metin/düğme nasıl görüntülenir?
- 26. C# Reaktif Uzantıları ile belirli bir zamanda bir işlevi çağırın
- 27. Bir düzen bileşeninin yüksekliğini, başka bir bileşenin yüksekliğine nasıl ayarlayabilirim?
- 28. HATA [karma]: [TypeError: HTML çıktısı eklerken yöntem 'push' komutunu çağırın]
- 29. Aynı anda birden fazla yöntem çağırın veya arayın.
- 30. Vue.js Bileşeninin Test Edilmesi
düzenlemek cevap bakınız. –