Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Как правильно передать значение поля класса в другой класс

Есть первый класс, в который я хочу передать данные из второго класса.
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));

Комментариев нет:

Отправить комментарий