如何从不同的类访问变量

RhysBuddy

用户输入消息后,我正尝试从另一个类访问存储在“ tf”中的值。
自从我使用Java以来​​已经有一段时间了,所以,我只是在做这个项目,这很有趣(不是我的代码,我只是从一个教程中编辑它)。
我尝试了很多事情,并且对方法和对象进行了很多研究,我觉得自己是如此亲密。我尝试访问的值在以下行的“ tf”中:

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

我的目标只是在另一个类中打印来自“ tf”的字符串。

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);
    }

}
约瑟夫118

您必须通过构造函数按引用传递对象。您可以传递整个JFrame并将tf公开-

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());
     }
}

或者您可以在创建其他类时传递tf值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从不同的类访问私有实例变量的值?

来自分类Dev

如何从不同的类访问NSMutableArray

来自分类Dev

如何从不同的类中获取变量?

来自分类Dev

从不同的类颤振访问StatefulWidget的State类变量

来自分类Dev

从不同文件访问类中的变量

来自分类Dev

从不同的函数访问变量

来自分类Dev

如何从不同的屏幕中访问变量值?

来自分类Dev

如何从不同的文件类函数导入变量

来自分类Dev

如何从不同的文件访问所需的模块?

来自分类Dev

如何从不同的场景访问对象的组件?

来自分类Dev

如何从不同的类(如身份验证器)访问EmberJS中的控制器?

来自分类Dev

Java如何使JTextArea可以从不同的类访问并以整数写入

来自分类Dev

如何从不同的控制器访问变量以使自定义下载操作起作用

来自分类Dev

如何从不同的脚本导入类,其中该类在初始化时使用全局变量?

来自分类Dev

从不同的ClassLoader加载的类中访问静态方法

来自分类Dev

从不同的AppDomain访问嵌套类的内部字段

来自分类Dev

从不同的类访问MainPage上的Popup.isopen

来自分类Dev

从不同按钮访问按钮的变量(C#形式)

来自分类Dev

从不同的类调用数据库连接变量

来自分类Dev

如何从不同的类编辑主类中标签的颜色?

来自分类Dev

如何在属性中维护状态,需要以(某种)父子关系从不同的类访问该状态?

来自分类Dev

如何从不同文件访问rascal.js发布?

来自分类Dev

如何从不同的链码访问相同的账本?

来自分类Dev

如何从不同的 ViewController 访问 Realm 数据库?

来自分类Dev

访问变量在不同的类中-Swift

来自分类Dev

如何从父类访问变量

来自分类Dev

如何访问父类变量?

来自分类Dev

如何访问异常类变量?

来自分类Dev

如何从不同的类获取checkstate和checkbox.text

Related 相关文章

  1. 1

    如何从不同的类访问私有实例变量的值?

  2. 2

    如何从不同的类访问NSMutableArray

  3. 3

    如何从不同的类中获取变量?

  4. 4

    从不同的类颤振访问StatefulWidget的State类变量

  5. 5

    从不同文件访问类中的变量

  6. 6

    从不同的函数访问变量

  7. 7

    如何从不同的屏幕中访问变量值?

  8. 8

    如何从不同的文件类函数导入变量

  9. 9

    如何从不同的文件访问所需的模块?

  10. 10

    如何从不同的场景访问对象的组件?

  11. 11

    如何从不同的类(如身份验证器)访问EmberJS中的控制器?

  12. 12

    Java如何使JTextArea可以从不同的类访问并以整数写入

  13. 13

    如何从不同的控制器访问变量以使自定义下载操作起作用

  14. 14

    如何从不同的脚本导入类,其中该类在初始化时使用全局变量?

  15. 15

    从不同的ClassLoader加载的类中访问静态方法

  16. 16

    从不同的AppDomain访问嵌套类的内部字段

  17. 17

    从不同的类访问MainPage上的Popup.isopen

  18. 18

    从不同按钮访问按钮的变量(C#形式)

  19. 19

    从不同的类调用数据库连接变量

  20. 20

    如何从不同的类编辑主类中标签的颜色?

  21. 21

    如何在属性中维护状态,需要以(某种)父子关系从不同的类访问该状态?

  22. 22

    如何从不同文件访问rascal.js发布?

  23. 23

    如何从不同的链码访问相同的账本?

  24. 24

    如何从不同的 ViewController 访问 Realm 数据库?

  25. 25

    访问变量在不同的类中-Swift

  26. 26

    如何从父类访问变量

  27. 27

    如何访问父类变量?

  28. 28

    如何访问异常类变量?

  29. 29

    如何从不同的类获取checkstate和checkbox.text

热门标签

归档