在上一節基礎上,新增光標顯示、左右方向鍵移動光標及刪除/恢復字符功能。
package com.java.test;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Book {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setSize(300, 500);
MyPanel myPanel = new MyPanel();
jFrame.add(myPanel);
jFrame.addKeyListener(myPanel);
myPanel.addKeyListener(myPanel);
jFrame.setVisible(true);
}
}
class MyPanel extends JPanel implements KeyListener {
char[] chars = new char[1000];
int size = 0; // 兼作光標位置
@Override
public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < size; i++) {
g.drawString(chars[i] + "", 10 + 8 * i, 10);
}
// 繪製光標
g.drawLine(10 + size * 8, 0, 10 + size * 8, 10);
}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
// 字母鍵錄入
if (code >= KeyEvent.VK_A && code <= KeyEvent.VK_Z) {
chars[size] = e.getKeyChar();
size++;
}
// 左鍵:光標左移(相當於刪除)
if (code == KeyEvent.VK_LEFT) {
if (size > 0) size--;
}
// 右鍵:光標右移(恢復被刪字符)
if (code == KeyEvent.VK_RIGHT) {
if (size < 1000) size++;
}
repaint();
}
@Override public void keyReleased(KeyEvent e) {}
@Override public void keyTyped(KeyEvent e) {}
}

按左鍵即刪除,按右鍵被刪字符重現,頗具趣味。