package com.zhuojiaoshou; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * Created by JiajieZhuo on 2017/3/5. */ public class ZJSNote { public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.setSize(300, 400); MyPanel mp = new MyPanel(); jFrame.add(mp); jFrame.addKeyListener(mp); mp.addKeyListener(mp); jFrame.setVisible(true); } } class Node { public char value = ' '; public Node next = null; } class MyPanel extends JPanel implements KeyListener { Node firstNode = new Node(); Node nowNode = firstNode; int cursor = 0; @Override public void paint(Graphics g) { // clear screen super.paint(g); Node tmpNode = firstNode; int x = 0; // word while (tmpNode.next != null) { g.drawString("" + tmpNode.next.value, 10 + x * 8, 10); x++; tmpNode = tmpNode.next; } // cursor g.drawLine(10 + cursor * 8, 0, 10 + cursor * 8, 10); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() >= KeyEvent.VK_A && e.getKeyCode() <= KeyEvent.VK_Z) { if (nowNode.next == null) { Node newNode = new Node(); newNode.value = e.getKeyChar(); nowNode.next = newNode; nowNode = newNode; cursor++; } else { Node newNode = new Node(); newNode.value = e.getKeyChar(); newNode.next = nowNode.next; nowNode.next = newNode; nowNode = newNode; cursor++; } } if (e.getKeyCode() == KeyEvent.VK_DELETE) { if (nowNode.next != null) { nowNode.next = nowNode.next.next; cursor--; } } if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) { if (cursor > 0) { Node tmpNode = firstNode; while (tmpNode.next != nowNode) { tmpNode = tmpNode.next; } tmpNode.next = nowNode.next; nowNode = tmpNode; cursor--; } } if (e.getKeyCode() == KeyEvent.VK_LEFT) { if (cursor > 0) { cursor--; Node tmpNode = firstNode; while (tmpNode.next != nowNode) { tmpNode = tmpNode.next; } nowNode = tmpNode; } } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { if (nowNode.next != null) { cursor++; nowNode = nowNode.next; } } repaint(); } @Override public void keyReleased(KeyEvent e) { } }
鏈表編輯器
可以用數組或者鏈表實現一個編輯器的功能,各自有各自的優缺點。
這裏只實現了單行的輸入、刪除、左移、右移功能,可以加入換行符實現多行文本編輯功能(但是鏈表實現這個不是很好設計,十字鏈表?這個最好還是使用數組),還可以加入文件的讀取和存儲實現編輯器的打開和保存功能,還可以加入網絡連接實現編輯器的網絡同步和備份功能。
//ZJSNote.java:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.