3-2使用链表的记事本
来源:互联网 发布:天津滨海网络广播电视 编辑:程序博客网 时间:2024/06/05 14:51
坚持练习20遍固然是艰难的,但是,没有天生的本领,就需要后天的努力!
今天继续把链表做的记事本贴出来,还是记录一下自己的学习之路,再次感谢王洋老师的java就该这样学~
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class test3_2 {
public static void main(String[] args) {
//窗体
JFrame w = new JFrame();
w.setSize(300,400);
//添加画布
MyPanel2 mp = new MyPanel2();
w.add(mp);
//添加键盘监听事件
w.addKeyListener(mp);
mp.addKeyListener(mp);
//可关闭
w.setVisible(true);
}
}
/*
* 1、需要定义跨越paint和键盘事件处理方法的变量,也就是第一个节点
* 2、在paint中 显示所有的变量
* 3、在键盘事件处理方法中加入新的节点
*/
class MyPanel2 extends Panel implements KeyListener{
//定义第一个节点
Node firstNode = new Node();
//当前节点
Node nowNode = firstNode;
//光标位置标量
int cursor = 0;
public void paint(Graphics g){
super.paint(g);//清空屏幕
//遍历每一个节点
//声明的临时变量是Node类型的,这样才能够指向每个节点
Node tmpNode = firstNode;
int x = 0;//需要调整x的坐标
while(tmpNode.next!=null){//最后一个节点是null
g.drawString(""+tmpNode.next.value, 10+8*x, 10);
x++;
//让tmpNOde在链表中向下移动
tmpNode = tmpNode.next;
}
//光标
g.drawLine(cursor*8+10, 0, cursor*8+10, 10);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
//输入字符
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();
//让新节点的next指向下一个节点
newNode.next = nowNode.next;
//让当前节点的next指向新节点
nowNode.next = newNode;
//维护nowNode和光标
nowNode = newNode;
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;
}
}
//按Backspace
if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
if(cursor>0){
//从第一个节点开始,找到当前节点的前一个节点
Node tmpNode = firstNode;
while(tmpNode.next!=nowNode){
tmpNode = tmpNode.next;
}
nowNode = tmpNode;//修改当前的节点
//删除当前节点
nowNode.next = nowNode.next.next;
cursor--;
}
}
//按delete
if(e.getKeyCode()==KeyEvent.VK_DELETE){
if(nowNode.next!=null){
//删除当前节点
nowNode.next = nowNode.next.next;
}
}
//重画
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
//节点类
class Node{
public char value = ' ';
public Node next = null;
}
这个是一个逻辑能力的训练,有些功能不太完善,希望大家不要喷我,毕竟菜鸟一只。谢谢了~
- 3-2使用链表的记事本
- TwoNote记事本的使用
- 记事本的开发---Tkinter的使用
- 我的记事本提示--vss使用步骤
- 使用wxPython实现的简易版记事本
- 使用JAVA swing实现简单的记事本
- 我的记事本之-SQLite数据库的使用
- 使用Java操作记事本
- 记事本使用技巧
- 使用记事本编写程序
- 使用Java操作记事本
- 使用记事本创建批处理文件
- CSDN-Markdown使用记事本
- 软件使用记事本!
- 调用记事本使用快捷键
- Java使用Ajax读取txt记事本的内容
- 代记事本的各种文档编辑器使用感受
- java 使用FileInputStream,FileReader,BufferedStream读写记事本文件的例子
- 密码学入门
- Python获取昨天、今天、明天开始、结束时间戳
- VS Code编译支持C++11问题
- docker swarm集群安装
- 关于tableViewCell截取子TableViewCell事件处理
- 3-2使用链表的记事本
- 数据结构与算法分析之排序算法总结
- tensorlow函数多个返回值问题
- 利用网络传输系统的声音
- Web开发中服务器转发方式forward和redirect的区别
- Centos 7 安装 memcached
- UINavigationBar 和 UITabBarItem 属性设置
- 设计模式之装饰者模式
- [LeetCode] 2Sum, 3Sum, 4Sum小结