Ситуация такова. Имеется Фрейм. На нём кнопка conntect её обрабатывает следующий слушатель
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| private class ConnectAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
//При первом вызове создаём диалоговое окно
if(dialog==null)
dialog = new PasswordChooser();
//Задаём значения по умолчанию
dialog.setUser((new User("EnterYourName",null)));
if (dialog.showDialog(DialogDataExchange.this, "Connect"))
{
//Начинаем ввод данных
User u = dialog.getUser();
textArea.append("user name="+u.getName()+" password="+(new String(u.getPassword()))+"\n");
}
}
} |
|
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
| private class PasswordChooser extends JPanel
{
private JTextField username;
private JPasswordField password;
private boolean ok;
private JDialog dialog;
public PasswordChooser()
{
setLayout(new BorderLayout());
//Создаёт панель с полями для ввода имени и пароля
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2,2));
panel.add(new JLabel("User name:"));
panel.add(username=new JTextField(""));
panel.add(new JLabel("Password:"));
panel.add(password= new JPasswordField(""));
add(panel,BorderLayout.CENTER);
//Создаём кнопки "OK" и "Cancel" перкращающие диалог.
JButton okButton = new JButton("Ok");
okButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
ok=true;
dialog.setVisible(false);
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
dialog.setVisible(false);
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
add(buttonPanel,BorderLayout.SOUTH);
/*Задаёт значения по умолчанию
@para, u информация, задаваемая по умолчанию*/
}
public void setUser(User u)
{
username.setText(u.getName());
}
/*Получает введённые данные
@return a объект, состояние которого определяетс введёнными данными*/
public User getUser()
{
return new User(username.getText(),password.getPassword());
}
/*Вывести панель для выбора в диалоговом окне
@param parent компонент в собственном фрейме или null
@param title заголовок диалогового окна*/
public boolean showDialog(Component parent,String title)
{
ok=false;
//Находим собственный фрейм
Frame owner = null;
if(parent instanceof Frame) owner=(Frame)parent;
else
owner =(Frame)SwingUtilities.getAncestorOfClass(Frame.class, parent);
//Если фрейм только что создан или был изменён
//Создаём новое диалоговоое окно
if(dialog==null||dialog.getOwner()!=owner)
{
dialog = new JDialog(owner,true);
dialog.getContentPane().add(this);
dialog.pack();
}
//Задаём заголовок и выводим диалог на экран
dialog.setTitle(title);
dialog.show();
// dialog.setLocationRelativeTo(null);
return ok;
}
} |
|
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| private class User
{
public User(String aName,char[] aPassword)
{
name=aName;
password=aPassword;
}
public String getName(){return name;}
public char[] getPassword(){return password;}
public void setName(String aName){name=aName;}
public void setPassword(char[] aPassword){password=aPassword;}
private String name;
private char[] password;
} |
|
И всё это внутри фрейма
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| public class DialogDataExchange extends JFrame{
public static final int DEFAULT_WIDTH=300;
public static final int DEFAULT_HEIGHT=200;
private PasswordChooser dialog = null;
private JTextArea textArea;
public DialogDataExchange()
{
setTitle("DataExchangeTest");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
//Создаём меню "File"
setLocationRelativeTo(null);
JMenuBar mbar = new JMenuBar();
setJMenuBar(mbar);
JMenu fileMenu = new JMenu("File");
mbar.add(fileMenu);
//Добавляем пункты коннект и exit
JMenuItem connectItem = new JMenuItem("Connect");
connectItem.addActionListener(new ConnectAction());
fileMenu.add(connectItem);
//Выбор пункта "Exit" завершает работу программы
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
fileMenu.add(exitItem);
textArea = new JTextArea();
getContentPane().add(new JScrollPane(textArea),BorderLayout.CENTER);
} |
|
По нажатию кнопки connect выскакивает форма(логин пароль)я не могу понять каким образом слушатель определяет, что пользователь нажал кнопку ок и каким образом работает метод showDialog если он всегда возвращает false. Т.к пользователь нажал кнопку ok=переменной ок присвоили значение true и метод showDialog всё равно вернул false.
Совсем не понимаю как работает ConnectAction слушатель просветите, знающие люди.