如何在聊天客户端GUI中实现发送按钮

时间:2014-09-25 10:34:18

标签: java user-interface client chat send

我已经实现了聊天客户端。截至目前,它只能在cmd中完全运行,因为我无法弄清楚我应该如何在聊天客户端GUI中实现发送按钮。

所以这是我的聊天客户端类:

class ChatClientClass {

    private String host;
    private int port;
    private Socket socket;
    private PrintWriter out;
    private BufferedReader in;
    private BufferedReader stdIn;

    ChatWindow chatWindow = new ChatWindow();

    public ChatClientClass(String host, int port) {
        try {   
            this.socket = new Socket(host, port);

            this.out = 
                new PrintWriter(socket.getOutputStream(), true);
            this.in = 
                new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            this.stdIn =
                new BufferedReader(
                    new InputStreamReader(System.in));

            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                chatWindow.addText("You: " + userInput);
                String serverMessage = in.readLine();
                chatWindow.addText(serverMessage);
            }
        } catch (UnknownHostException e) {
            System.err.println("Couldn't not find host " + host);
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to " + host);
            e.printStackTrace();
            System.exit(1);
        }
    }   
}

截至目前,我只能在命令提示符下编写内容。但我所写的以及服务器回答的内容将出现在我的GUI中。 addText(String text) - 方法将输入和输出添加到我的GUI。

但我无法弄清楚如何实现我的发送按钮。一个简单的方法是,当我调用ActionListener类的构造函数时,我可以发送对PrintWriter的引用和对GUI的引用,并在thePrintWriter.println( [get the value of the text area that belongs to the send button] )中执行类似:public void actionPerformed(ActionEvent e)的操作 - 方法。但是因为我不能/不应该从我的聊天客户端类调用我的ActionListener的构造函数,因此发送这些引用。那不可能,对吗?

我还考虑过将PrintWriter变量设为静态,并使包含我想要发送变量的消息的JTextArea变为静态,然后创建静态方法来访问这两个变量。但是,当我这样做时,感觉就像我做了一件非常错误的事情。而我也无法做到这一点。

那么聊天客户端中的发送按钮应该如何实现呢?

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果您是java / eclipse中GUI构建的新手。 我建议你gui建设者: http://www.eclipse.org/windowbuilder/

它非常易于使用,您可以为您的应用制作简单的GUI。

对于你的问题,你需要一个框架按钮,你需要添加一个动作修复器,而不是你发射它就可以做你想做的事。

    import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class ButtonAction {

    private static void createAndShowGUI()  {

        JFrame frame1 = new JFrame("JAVA");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton button = new JButton(" >> JavaProgrammingForums.com <<");
        //Add action listener to button



        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)
            {
                //Execute when button is pressed
                 //Here call your sender fucntion 
           out.println(userInput);
           chatWindow.addText("You: " + userInput);
           String serverMessage = your_jtext.getText();
           chatWindow.addText(serverMessage);
                System.out.println("You clicked the button");
            }
        });      

        frame1.getContentPane().add(button);
        frame1.pack();
        frame1.setVisible(true);
    }


    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}