2015-04-17 2 views
-3

Я пытаюсь получить доступ к значению, хранящемуся в «tf» из другого класса, как только пользователь набрал его сообщение.
Прошло некоторое время, так как я работал с Java, поэтому, я просто делаю этот проект для удовольствия (не мой код, я просто редактирую его из учебника).
Я пробовал так много вещей и много исследовал методы и объекты, чувствую, что у меня так близко. Значение Я пытаюсь получить доступ в «ТФ» на линии:Как получить доступ к переменной из другого класса

client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, tf.getText())); 
tf.setText(""); 
return; 

Моя цель состоит в том, чтобы просто напечатать строку из «ТФ» в другом классе.

public class ClientGUI extends JFrame implements ActionListener { 

    private static final long serialVersionUID = 1L; 
    // will first hold "Username:", later on "Enter message" 
    private JLabel label; 
    // to hold the Username and later on the messages 
    private JTextField tf; 
    // to hold the server address an the port number 
    private JTextField tfServer, tfPort; 
    // to Logout and get the list of the users 
    private JButton login, logout, whoIsIn; 
    // for the chat room 
    private JTextArea ta; 
    // if it is for connection 
    private boolean connected; 
    // the Client object 
    private Client client; 
    // the default port number 
    private int defaultPort; 
    public String userMessage; 
    private String defaultHost; 
    // Constructor connection receiving a socket number 
    ClientGUI(String host, int port) { 

     super("Chat Client"); 
     defaultPort = port; 
     defaultHost = host; 

     // The NorthPanel with: 
     JPanel northPanel = new JPanel(new GridLayout(3,1)); 
     // the server name and the port number 
     JPanel serverAndPort = new JPanel(new GridLayout(1,5, 1, 3)); 
     // the two JTextField with default value for server address and port number 
     tfServer = new JTextField(host); 
     tfPort = new JTextField("" + port); 
     tfPort.setHorizontalAlignment(SwingConstants.RIGHT); 

     serverAndPort.add(new JLabel("Server Address: ")); 
     serverAndPort.add(tfServer); 
     serverAndPort.add(new JLabel("Port Number: ")); 
     serverAndPort.add(tfPort); 
     serverAndPort.add(new JLabel("")); 
     // adds the Server an port field to the GUI 
     northPanel.add(serverAndPort); 

     // the Label and the TextField 
     label = new JLabel("Enter your username below", SwingConstants.CENTER); 
     northPanel.add(label); 
     tf = new JTextField("Scooby Doo"); 
     tf.setBackground(Color.WHITE); 
     northPanel.add(tf); 
     add(northPanel, BorderLayout.NORTH); 

     // The CenterPanel which is the chat room 
     ta = new JTextArea("Welcome to the Chat room\n", 80, 80); 
     JPanel centerPanel = new JPanel(new GridLayout(1,1)); 
     centerPanel.add(new JScrollPane(ta)); 
     ta.setEditable(false); 
     add(centerPanel, BorderLayout.CENTER); 

     // the 3 buttons 
     login = new JButton("Login"); 
     login.addActionListener(this); 
     logout = new JButton("Logout"); 
     logout.addActionListener(this); 
     logout.setEnabled(false);  // you have to login before being able to logout 
     whoIsIn = new JButton("Who is in"); 
     whoIsIn.addActionListener(this); 
     whoIsIn.setEnabled(false);  // you have to login before being able to Who is in 

     JPanel southPanel = new JPanel(); 
     southPanel.add(login); 
     southPanel.add(logout); 
     southPanel.add(whoIsIn); 
     add(southPanel, BorderLayout.SOUTH); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(600, 600); 
     setVisible(true); 
     tf.requestFocus(); 

    } 


    // called by the Client to append text in the TextArea 
    void append(String str) { 
     ta.append(str); 
     ta.setCaretPosition(ta.getText().length() - 1); 
    } 
    // called by the GUI is the connection failed 
    // we reset our buttons, label, textfield 
    void connectionFailed() { 
     login.setEnabled(true); 
     logout.setEnabled(false); 
     whoIsIn.setEnabled(false); 
     label.setText("Enter your username below"); 
     tf.setText("Anonymous"); 
     // reset port number and host name as a construction time 
     tfPort.setText("" + defaultPort); 
     tfServer.setText(defaultHost); 
     // let the user change them 
     tfServer.setEditable(false); 
     tfPort.setEditable(false); 
     // don't react to a <CR> after the username 
     tf.removeActionListener(this); 
     connected = false; 
    } 

    /* 
    * Button or JTextField clicked 
    */ 
    public void actionPerformed(ActionEvent e) { 
     Object o = e.getSource(); 
     // if it is the Logout button 
     if(o == logout) { 
      client.sendMessage(new ChatMessage(ChatMessage.LOGOUT, "")); 
      return; 
     } 
     // if it the who is in button 
     if(o == whoIsIn) { 
      client.sendMessage(new ChatMessage(ChatMessage.WHOISIN, "")); 
      return; 
     } 

     // ok it is coming from the JTextField 
     if(connected) { 

      // just have to send the message 
      client.sendMessage(new ChatMessage(ChatMessage.MESSAGE, tf.getText())); 
      tf.setText(""); 
      return; 
     } 


     if(o == login) { 
      // ok it is a connection request 
      String username = tf.getText().trim(); 
      // empty username ignore it 
      if(username.length() == 0) 
      return; 
      // empty serverAddress ignore it 
      String server = tfServer.getText().trim(); 
      if(server.length() == 0) 
      return; 
      // empty or invalid port numer, ignore it 
      String portNumber = tfPort.getText().trim(); 
      if(portNumber.length() == 0) 
      return; 
      int port = 0; 
      try { 
       port = Integer.parseInt(portNumber); 
      } 
      catch(Exception en) { 
       return; // nothing I can do if port number is not valid 
      } 

      // try creating a new Client with GUI 
      client = new Client(server, port, username, this); 
      // test if we can start the Client 
      if(!client.start()) 
      return; 
      tf.setText(""); 
      label.setText("Enter your message below"); 
      connected = true; 

      // disable login button 
      login.setEnabled(false); 
      // enable the 2 buttons 
      logout.setEnabled(true); 
      whoIsIn.setEnabled(true); 
      // disable the Server and Port JTextField 
      tfServer.setEditable(false); 
      tfPort.setEditable(false); 
      // Action listener for when the user enter a message 
      tf.addActionListener(this); 
     } 

    } 


    // to start the whole thing the server 
    public static void main(String[] args) { 
     new ClientGUI("124.178.99.83", 25565); 
    } 

} 
+1

ли этот другой объект (класс) есть ссылка на ClientGUI ? – BretC

+1

Просто передайте значение в вызове метода. –

ответ

0

Вы должны передать объект по ссылке через конструктор. Вы можете пройти весь JFrame и сделать свой тс общественности -

public static void main(String[] args){ 
    ClientGUI x = new ClientGUI("0.0.0.0", 1234); 
    OtherClass y = new OtherClass(x); 
} 

public class otherClass { 
    private ClientGUI x; 
    public otherClass(ClientGUI x){ 
      this.x = x; 
    } 
    public void print(){ 
      System.out.println(x.tf.getText()); 
    } 
} 

или вы можете просто передать значение тс при создании другой класс

Смежные вопросы