我已经实现了聊天客户端。截至目前,它只能在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变为静态,然后创建静态方法来访问这两个变量。但是,当我这样做时,感觉就像我做了一件非常错误的事情。而我也无法做到这一点。
那么聊天客户端中的发送按钮应该如何实现呢?
提前致谢!
答案 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();
}
});
}
}