У меня есть следующий пример кода:
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class SampleFocus extends JFrame {
public SampleFocus(String titel) {
setTitle(titel);
JTextField txtField1 = new JTextField("default-click");
JTextField txtField2 = new JTextField("alternative-Text");
JTextField txtField3 = new JTextField("own diaolog textfield");
JTextArea dummyLabel = new JTextArea(10, 20);
dummyLabel.setText("empty textarea, which is focusable");
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
add(txtField1);
add(dummyLabel);
add(txtField2);
JDialog altDialog = new JDialog(this);
altDialog.add(txtField3);
altDialog.setVisible(true);
altDialog.pack();
FocusAdapter myFocusListner = new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
if (e.getComponent() instanceof JTextField) {
System.out.println("gained for TextField: "
+ ((JTextField) e.getComponent()).getText());
} else {
System.out.println("gained for component: " + e.getComponent());
}
}
};
txtField1.addFocusListener(myFocusListner);
txtField2.addFocusListener(myFocusListner);
txtField3.addFocusListener(myFocusListner);
// dummyLabel.addFocusListener(myFocusListner);
}
public static void main(String[] args) {
JFrame frame = new SampleFocus("FocusListener - sample");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Когда я переключаюсь с кадра в диалоговое окно, я получаю правильное событие.Когда я переключаюсь обратно в кадр, я получаю и правильные FocusEvents.Моя проблема в том, что когда я переключаюсь назад, я также получаю FocusEvents для компонентов, которые мне не интересны.
например,
Выберите 'default-click' ==> Dialog / Textfield==> Frame / 'empty textarea'
Результат: я получаю событие FocusGained для 'щелчка по умолчанию', хотя компонент НЕ имеет фокуса.
Желаемый результат: Любой
Компонент 'щелчок по умолчанию' не получает FocusEvent ИЛИ
различают, действительно ли компонент получил Событие должным образом (например, я мог щелкнуть в нема также)
Обходной путь, который я нашел:
Присоедините к JTextArea, а также к FocusListener.Проблема в том, что это означало бы, что мне нужно присоединить к ВСЕМ моих компонентов Слушатель.Что вряд ли возможно.Есть идеи?
Есть идеи, как получить результат?
Thx LeO