链表编辑器
来源:互联网 发布:linux vim 查找命令 编辑:程序博客网 时间:2024/05/22 12:58
可以用数组或者链表实现一个编辑器的功能,各自有各自的优缺点。
这里只实现了单行的输入、删除、左移、右移功能,可以加入换行符实现多行文本编辑功能(但是链表实现这个不是很好设计,十字链表?这个最好还是使用数组),还可以加入文件的读取和存储实现编辑器的打开和保存功能,还可以加入网络连接实现编辑器的网络同步和备份功能。
//ZJSNote.java:
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) { }}
0 0
- 链表编辑器
- NOI2003 文本编辑器 块状链表
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- 编辑器
- (顺序容器类)链表应用:一个行编辑器
- bzoj 1269 [AHOI2006]文本编辑器editor 块状链表
- Zen-编辑器- 常用快捷链
- 设备模型四(uevent)
- 约瑟夫环
- storyboard的基础知识
- JSP数据交互之单元测试JUNIT
- 京京_标签的控制隐藏与显示
- 链表编辑器
- Linux与Windows系统相比有哪些优越性?市面上linux系统主要应用在哪些领域?
- scrapy windows 安装
- 剑指Offer
- css的first-child
- 一个空格惹的祸
- Linux系统基础课程感想
- 关于键盘弹起底部导航栏
- 转载的关于安装Oracle时调整Linux内核参数