Где спрятан even TextChanged для jTextField?
Модератор: Absurd
-
- Сообщения: 116
- Зарегистрирован: 15 июл 2004, 13:06
- Откуда: ISRAEL (ранее - из Литвы)
- Контактная информация:
Вот накопал
вижк что число в txtTimer доходит до нуля , но ничего не происходит
Код: Выделить всё
txtTimer.setText(-1+"");
txtTimer.getDocument().putProperty("name",txtTimer.getText());
txtTimer.setForeground(new java.awt.Color(255, 0, 0));
txtTimer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED, null, new java.awt.Color(204, 204, 204), null, null));
txtTimer.setFocusable(false);
txtTimer.setMinimumSize(new java.awt.Dimension(15, 18));
txtTimer.getDocument().addDocumentListener(new DocumentListener(){
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from insert");
}
public void removeUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from remove");
}
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
InputVerifier подойдёт?
в приведённом коде столько всего лишнего, что не могу понять, что именно требуется сделать.
P.S. Можно, конечно, и по грубому: textField.addKeyListener ;-)
в приведённом коде столько всего лишнего, что не могу понять, что именно требуется сделать.
P.S. Можно, конечно, и по грубому: textField.addKeyListener ;-)
-
- Сообщения: 116
- Зарегистрирован: 15 июл 2004, 13:06
- Откуда: ISRAEL (ранее - из Литвы)
- Контактная информация:
keyListenet не подойдёт так как текст нетмяется не с клавиатуры , а каким то TimerThread. Вот упрощённый код
Код: Выделить всё
txtTimer.setText(-1+"");
txtTimer.getDocument().putProperty("name",txtTimer.getText());
txtTimer.getDocument().addDocumentListener(new DocumentListener(){
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from insert");
}
public void removeUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from remove");
}
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
michael, честно говоря, JTextField в коде я так и не нашел ...
Но если интересует какой-нибудь change в данной конструкции,
то навешивающийся DocumentListener имеет метод "changedUpdate"
а поскольку DocumentListener - это интерфейс, удивлён, что в приведённом коде не указан этот метод
(с другой стороны, код ведь явно обрезан снизу)
Но если интересует какой-нибудь change в данной конструкции,
то навешивающийся DocumentListener имеет метод "changedUpdate"
а поскольку DocumentListener - это интерфейс, удивлён, что в приведённом коде не указан этот метод
(с другой стороны, код ведь явно обрезан снизу)
-
- Сообщения: 116
- Зарегистрирован: 15 июл 2004, 13:06
- Откуда: ISRAEL (ранее - из Литвы)
- Контактная информация:
OSCAR не прошло.
Поясню условие задачи. Есть thread что считает от 30 до нуля. Каждую секунду он обновляет JTextField (txtTimer). На самом деле можно возложить на него обязонасть сделать что то когда время проходит, но меня уже заинтересовал вопрос как отследить text changed для JTextField . Пока что-никак
вот что я сделал до сих пор
-1 это изначальное значение JTextField . Одназначно Thread работает. (Я вижу визуально как меняются значения в JTextField )
Поясню условие задачи. Есть thread что считает от 30 до нуля. Каждую секунду он обновляет JTextField (txtTimer). На самом деле можно возложить на него обязонасть сделать что то когда время проходит, но меня уже заинтересовал вопрос как отследить text changed для JTextField . Пока что-никак
вот что я сделал до сих пор
Код: Выделить всё
txtTimer.setText(-1+"");
txtTimer.getDocument().putProperty("name",txtTimer.getText());
txtTimer.getDocument().addDocumentListener(new DocumentListener(){
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from insert");
}
public void removeUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from remove");
}
public void changedUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
if (doc.getProperty("name").toString().trim().equals("0"))
System.out.println("from change");
}});
- Oscar
- Сообщения: 963
- Зарегистрирован: 29 май 2004, 13:44
- Откуда: Мюнхен (рожден в Киеве)
- Контактная информация:
michael, нашел я у тебя ошибку ...
Если не вызывается System.out.println("from .."); то не будет ли логичным посмотреть, почему условие не выполняется-то? ;-)
итак, в самом начале для документа устанавливается проперти name со значением "-1".
Что у нас происходит дальше?
Правильно, поток декрементирует себе значение тэкстФилда, но проперти-то остаётся "-1" ))))
Думаю, ты понял мою мысль.
Вот вариант того что ты хочешь, так чтобы не лезть в Thread
1. В insertUpdate вывод лишь для того, чтобы показать, что проперти не меняется.
2. На самом деле намного проще в методе run опрашивать переменную [ while(countDown > 0) { ], но это уже тебе решать.
Если не вызывается System.out.println("from .."); то не будет ли логичным посмотреть, почему условие не выполняется-то? ;-)
итак, в самом начале для документа устанавливается проперти name со значением "-1".
Что у нас происходит дальше?
Правильно, поток декрементирует себе значение тэкстФилда, но проперти-то остаётся "-1" ))))
Думаю, ты понял мою мысль.
Вот вариант того что ты хочешь, так чтобы не лезть в Thread
Код: Выделить всё
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
public class TextFieldDemo implements Runnable {
private JTextField textField;
private int countDown = 5;
private boolean running = true;
public TextFieldDemo() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textField = new JTextField();
textField.setText(countDown + "");
textField.setEditable(false);
textField.getDocument().putProperty("test", textField.getText());
textField.getDocument().addDocumentListener(new DocumentListener(){
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
System.out.println(doc.getProperty("test"));
check();
}
public void removeUpdate(DocumentEvent e) {
check();
}
public void changedUpdate(DocumentEvent e) {
check();
}
});
frame.add(textField);
frame.pack();
frame.setVisible(true);
new Thread(this).start();
}
private void check() {
if (textField.getText().equals("0")) {
running = false;
}
}
public static void main(String[] argv) {
new TextFieldDemo();
}
public void run() {
while(running) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
countDown--;
textField.setText(countDown + "");
}
JOptionPane.showMessageDialog(null, "BABAM!", "big bada bum", JOptionPane.ERROR_MESSAGE);
}
}
2. На самом деле намного проще в методе run опрашивать переменную [ while(countDown > 0) { ], но это уже тебе решать.
-
- Сообщения: 116
- Зарегистрирован: 15 июл 2004, 13:06
- Откуда: ISRAEL (ранее - из Литвы)
- Контактная информация:
Спасибо Oscar. Помогло.
--------------------------
2. На самом деле намного проще в методе run опрашивать переменную [ while(countDown > 0) { ], но это уже тебе решать.
--------------------------
Дело в том что поток работает на сервере а обновляет информаию на клиенте, не хочется загружать сервер операциями каторый клиент в состояние сделать сам
--------------------------
2. На самом деле намного проще в методе run опрашивать переменную [ while(countDown > 0) { ], но это уже тебе решать.
--------------------------
Дело в том что поток работает на сервере а обновляет информаию на клиенте, не хочется загружать сервер операциями каторый клиент в состояние сделать сам