Существует код моей простой Программы. Существует четыре текстовых поля. Когда курсор находится на первом текстовомField Создается JOptionPane и при нажатии ok курсор перемещается в следующее поле, а OptionPane снова создается и т. Д. , когда курсор находится в четвертом поле, и я нажимаю OK на OptionPane, курсор перемещается в пятое поле " е». , когда курсор находится в поле, я напечатать possition поля в массиве: System.out.println («первый или второй, третьей или четвертой»)FocusListener & JOptionPane
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Hello extends JFrame implements ActionListener, FocusListener {
public JTextField[] fields = new JTextField[4];
public JPanel panel = new JPanel();
public JTextField f = new JTextField(12);
public static void main(String[] args) {
new Hello();
}
public Hello() {
for (int i = 0; i < 4; i++) {
fields[i] = new JTextField(12);
fields[i].addFocusListener(this);
panel.add(fields[i]);
}
add(panel);
add(f);
setTitle("Hello World");
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(920, 420);
setLocation(100, 100);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae) {
}
@Override
public void focusGained(FocusEvent fe) {
if (fe.getSource() == fields[0]) {
JOptionPane.showMessageDialog(null, "HELLO");
fields[1].requestFocus();
System.out.println("FIRST");
} else if (fe.getSource() == fields[1]) {
JOptionPane.showMessageDialog(null, "HELLO");
fields[2].requestFocus();
System.out.println("SECOND");
} else if (fe.getSource() == fields[2]) {
JOptionPane.showMessageDialog(null, "HELLO");
fields[3].requestFocus();
System.out.println("THIRD");
} else if (fe.getSource() == fields[3]) {
JOptionPane.showMessageDialog(null, "HELLO");
f.requestFocus();
System.out.println("FOURTH")
}
}
@Override
public void focusLost(FocusEvent fe) {
}
}
Когда нет OptionPane, курсор перемещается вперед от первого поля до четвертого и гравюр:
FIRST
SECOND
THIRD
FOURTH
но когда есть JOptionPane выход:
FIRST
SECOND
FIRST
SECOND
THIRD
SECOND
THIRD
FOURTH
THIRD
FOURTH
FOURTH
можно увидеть тыс после второго поля он возвращается к первому, после третьего поля он возвращается ко второму, вместо того, чтобы идти на четвертый после четвертого поля, он возвращается к третьему.
Я хочу знать, почему? и как я могу это исправить?
Это то, что мне было нужно. Спасибо большое –