下面是添加监听器的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatClient {
private JTextArea textArea;
private JTextField textField;
private JButton sendButton;
private JButton exitButton;
public ChatClient() {
textArea = new JTextArea(10, 50);
textField = new JTextField(50);
sendButton = new JButton("Send");
exitButton = new JButton("Quit");
}
public void launchFrame() {
Frame jf=new JFrame("Chat Room");
JPanel bigJpanel=new JPanel();
JScrollPane jScrollPane1=new JScrollPane();
JPanel jp1=new JPanel();
// 注册事件监听器
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = textField.getText();
if (!message.equals("")) { // 如果消息非空,则将其追加到聊天记录中,并清空输入框
textArea.append(message + "\n");
textField.setText("");
}
}
});
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0); // 点击“退出”按钮时退出程序
}
});
// 处理按回车键的事件,与发送按钮相同
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = textField.getText();
if (!message.equals("")) {
textArea.append(message + "\n");
textField.setText("");
}
}
});
JPanel jp2=new JPanel();
jp2.setLayout(new BoxLayout(jp2,BoxLayout.Y_AXIS));
//设置顶部标签
JLabel jLabel=new JLabel("Chat Room",SwingConstants.CENTER);
jLabel.setFont(new Font("宋体", Font.PLAIN, 30));
jLabel.setForeground(Color.WHITE);
jLabel.setOpaque(true);
jLabel.setBackground(Color.pink);
//设置边框
Border border = new LineBorder(Color.pink, 4, true);
bigJpanel.setBorder(border);
jScrollPane1.setViewportView(textArea); // 将文本区域添加到滚动面板中,以便可以滚动查看聊天记录
jp1.add(textField);
jp2.add(sendButton);
jp2.add(exitButton);
bigJpanel.add(jScrollPane1); // 将滚动面板添加到主面板上
bigJpanel.add(jp1);
bigJpanel.add(jp2);
bigJpanel.add(jLabel);
jf.getContentPane().add(bigJpanel);
jf.pack();
jf.setLocationRelativeTo(null); // 窗口居中显示
jf.setVisible(true);
}
public static void main(String[] args) {
ChatClient client = new ChatClient();
client.launchFrame();
}
}
我们为发送按钮、退出按钮和输入框分别注册了监听器:
- 发送按钮和输入框的监听器处理方式相同,即在输入框中获取文本并将其追加到聊天记录区域中。如果输入框为空,则不执行任何操作。
- 退出按钮的监听器点击后直接退出程序。
我们还为输入框添加了按回车键的事件处理,与发送按钮相同。
注意:在注册监听器时,需要使用匿名内部类来实现 ActionListener 接口。这是因为该接口中只有一个方法需要被实现,所以可以使用匿名内部类的方式简化代码。