Есть первый класс, в который я хочу передать данные из второго класса.
public class Client extends UserInterfaceClient {
private PrintWriter writer;
Socket socket;
public void setUpConnection (){
TestActionListener testActionListener = new TestActionListener();
try {
socket = new Socket("127.0.0.1", 5052);
writer = new PrintWriter(socket.getOutputStream(),true);
writer.println(testActionListener.getMessages());
System.out.print(testActionListener.getMessages());
writer.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
И вот второй класс из которого я пытаюсь передать значение.
public class UserInterfaceClient {
JTextField outgoing;
JTextField test;
public void go(){
JFrame frame = new JFrame("Client");
JPanel mainPanel = new JPanel();
outgoing = new JTextField(20);
test = new JTextField(10);
JButton sendButton = new JButton("Send");
ActionListener actionListener = new TestActionListener();
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
frame.setSize(400, 500);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
mainPanel.add(sendButton);
mainPanel.add(outgoing);
sendButton.addActionListener(actionListener);
}
public class TestActionListener implements ActionListener{
private String messages;
@Override
public void actionPerformed(ActionEvent e) {
try {
messages = outgoing.getText();
}catch (Exception ex){
ex.printStackTrace();
}
outgoing.setText("");
outgoing.requestFocus();
}
public String getMessages(){
return messages;
}
}
public static void main (String[] args){
new UserInterfaceClient().go();
new Client().setUpConnection();
}
}
Я понимаю, что до нажатия кнопки поле класса TestActionListener messages - null. В итоге именно это значение передаются через метод в другой класс. Почему так?
Ответ
public void setUpConnection (){
TestActionListener testActionListener = new TestActionListener();
...
}
Это первый actionListener.
public void go(){
...
ActionListener actionListener = new TestActionListener();
...
}
Это второй actionListener. И после этого вы хотите, чтобы они были одинаковыми? В одном классе вы создаете экземпляр класса TestActionListener, в другой вы передаёте уже созданный экземпляр. И тогда всё заработает.
Передавать можно:
через конструктор класса
через метод класса
через абстрактный метод класса. Определив все действия в момент создания.
Подписать один из классов на события (аналог sendButton.addActionListener(actionListener));
Комментариев нет:
Отправить комментарий