用java 【例10-5】利用成员内部类实现事件监听。在文本框中输入文字,点击发送按钮或者按下Enter键,文本框中的文字会添加到文本域申。如果文本域输入“hehe”,则自动向文本域中添加"(^o^)/”的表情。
时间: 2024-12-23 10:21:09 浏览: 16
在Java中,你可以通过创建一个成员内部类并实现监听器的方式来实现实时事件处理。下面是一个例子展示了如何利用`ActionListener`和`JTextField`以及`KeyListener`来完成这个功能:
```java
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class EventExample extends JFrame {
private JTextField textField;
private JTextArea textArea;
// 创建一个内部类作为监听器
private class TextInputHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String input = textField.getText();
if ("hehe".equals(input)) {
textArea.append("(^o^)/\n");
} else {
textArea.append(input + "\n");
}
textField.setText("");
}
}
private class KeyPressHandler implements KeyListener {
@Override
public void keyTyped(KeyEvent e) {
// 检查是否按下了Enter键
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
actionPerformed(null);
}
}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
}
public EventExample() {
textField = new JTextField(20);
textArea = new JTextArea();
JButton sendButton = new JButton("发送");
sendButton.addActionListener(new TextInputHandler());
textField.addKeyListener(new KeyPressHandler());
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(textField);
panel.add(sendButton);
setContentPane(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
EventExample app = new EventExample();
}
}
```
在这个例子中,`TextInputHandler`内部类实现了`ActionListener`,当用户点击发送按钮或按下Enter键时,它会检查文本框的内容。如果内容是"hehe",就追加一个表情;否则直接追加用户输入的内容。`KeyPressHandler`内部类实现了`KeyListener`,监听键盘事件,如果检测到Enter键被按下,同样调用`actionPerformed`方法。
阅读全文