java的栈图形演示


  1 import java.awt.*;
2 import javax.swing.*;
3 import java.awt.event.*;
4 /*
5 指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件(比如 Button)生成此高级别事件。
6 事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。
7 所以在给TextField类添加 ActionListener 类型的监听器时就会失败!
8
9 ****下面还有XXXListener和XXXAdapter的用法,相信你会喜欢上XXXAdapter的用法
10 */
11 public class stackDemo extends MouseAdapter{
12 JFrame fr=new JFrame("StackDemo");//对话框
13 JPanel pan= new JPanel();//菜单面板
14 JPanel panStack = new JPanel();
15 JButton pushBtn, popBtn, peekBtn;
16 JTextField tf= new JTextField("整数", 4);
17 JButton stackBtn[]= new JButton[10];
18
19 JPanel panStackPointerLabel= new JPanel();
20 JLabel stackPointerLabel = new JLabel("<-top");
21
22 JPanel panRet= new JPanel();
23 JTextField tfRet= new JTextField("操作结果!");
24
25 int top;
26
27 public stackDemo(){
28 fr.setSize(420,500);
29 fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
30 fr.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
31
32 pan.setPreferredSize(new Dimension(400, 50));
33 pan.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
34 panStack.setPreferredSize(new Dimension(80, 350));//设置栈面板大小
35 panStack.setBackground(Color.yellow);
36 pan.setBackground(Color.blue);
37 pan.add(new JLabel("操作菜单:"));
38 pan.add(pushBtn=new JButton("进栈"));
39 pushBtn.addMouseListener(new pushAction());
40 pan.add(popBtn=new JButton("出栈"));
41 popBtn.addMouseListener(new popAction());
42 pan.add(peekBtn=new JButton("栈顶元素"));
43
44 tf.addMouseListener(this);
45 pan.add(tf);
46
47 for(int i=0; i<10; ++i){
48 stackBtn[i]=new JButton(" ");
49 panStack.add(stackBtn[i]);
50 }
51 fr.add(pan);
52 fr.add(panStack);
53 panStackPointerLabel.setLayout(null);
54 panStackPointerLabel.setPreferredSize(new Dimension(80, 350));//设置指针面板的大小
55 panStackPointerLabel.setBackground(Color.LIGHT_GRAY);
56 stackPointerLabel.setFont(new Font("华文行楷", Font.BOLD, 20));
57 panStackPointerLabel.add(stackPointerLabel);
58
59 fr.add(panStackPointerLabel);
60 panRet.setLayout(new FlowLayout(FlowLayout.LEFT));
61 panRet.setBackground(Color.red);
62 panRet.setPreferredSize(new Dimension(400, 50));
63
64 tfRet.setEditable(false);//不能不编辑
65 panRet.add(tfRet);//操作结果面板
66 fr.add(panRet);
67 fr.setVisible(true);
68 stackPointerLabel.setBounds(0, stackBtn[9].getLocation().y, 50, 50);//设置栈顶指针位置
69 top=9;
70 }
71
72 public void mouseClicked(MouseEvent e){
73 tf.selectAll();//鼠标单击时选中全部文本
74 }
75
76 //push 按钮监听器
77 class pushAction implements MouseListener{
78 public void mouseClicked(MouseEvent e){
79 String text;
80
81 if((text=tf.getText())!=" "){
82 for(int i=0; i<text.length(); ++i)
83 if(!Character.isDigit(text.charAt(i)))
84 return ;
85 }
86 if(top<0){
87 tfRet.setText("栈顶溢出!");
88 return ;
89 }
90 Point pt=stackBtn[top].getLocation();
91 stackBtn[top].setText(text);
92 tfRet.setText("进栈值" + text);
93 stackPointerLabel.setBounds(0, pt.y, 50, 50);
94 --top;
95 }
96 public void mouseDragged(MouseEvent e){}
97 public void mouseEntered(MouseEvent e){}
98 public void mouseExited(MouseEvent e){}
99 public void mouseMoved(MouseEvent e){}
100 public void mouseReleased(MouseEvent e){}
101 public void mousePressed(MouseEvent e){}
102 }
103
104 //pop按钮监听器
105 class popAction extends MouseAdapter{
106 public void mouseClicked(MouseEvent e){
107 String text;
108 if(top>=9){
109 tfRet.setText("栈底溢出!");
110 return ;
111 }
112 ++top;
113 Point pt=stackBtn[top].getLocation();
114 text=stackBtn[top].getText();
115 tfRet.setText("出栈值" + text);
116 stackBtn[top].setText(" ");
117 stackPointerLabel.setBounds(0, pt.y, 50, 50);
118 }
119 }
120
121 public static void main(String args[]){
122 stackDemo mySstackDemo = new stackDemo();
123 }
124 }

java的栈图形演示

时间: 2025-01-13 00:36:59

java的栈图形演示的相关文章

java技术栈

java技术栈 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序 1.2 二叉查找树.红黑树.B树.B+树.LSM树(分别有对应的应用,数据库.HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中

JVM运行时数据区--java虚拟机栈

虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令. 内存中的堆与栈 栈是运行时的单位,而堆是存储的单位1.栈解决程序的运行问题,即程序如何执行,或者说如何处理数据.堆解决的是数据存储的问题,即数据怎么放.放在哪儿. 2.一般来讲,对象主要都是放在堆空间的,是运行时数据区比较大的一块 3.栈空间存放 基本数据类型的局部变量,以及引用数据类型

JAVA虚拟机栈

JAVA虚拟机栈几个重要概念 java 虚拟机栈 = java virtual machine stacks = jvms 1.JVMS 线程私有,生命周期与线程相同 2.JVMS 描述的是JAVA方法执行的内存模型:JVMS在方法执行时会创建一个"栈帧" stack frame,用于记录局部变量表.操作数栈.动态链接.方法出口等,每一个方法从调用到完成的过程,就是一个栈帧在JVMS中入栈到出栈的过程 3.局部变量表存放基本数据类型.对象引用.returnAddress(字节码指令地址

Java虚拟机栈和本地方法栈

Java虚拟机栈的特征 线程私有 后进先出(LIFO)栈 存储栈帧,支持Java方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 Java本地方法栈的特征 线程私有 后进先出(LIFO)栈 作用是支撑Native方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现 栈帧的概念和特征 Java虚拟机栈中存储的

java超强分页标签演示

最近在做一个项目,用到了一个分页,于是动手写了个分页标签,先将代码贴出来,供大家交流,写的不好,请见谅!. 以下是java标签类,继承自SimpleTagSupport [java] view plaincopyprint? package com.lynn.oa.tag; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.jsp.JspExcep

Java中栈的两种实现

栈是先进后出的数据结构,主要有弹栈,入栈两种操作. 数组版 1 package stack; 2 3 /*** 4 * 栈的数组实现--java 5 * 栈是先进后出的数据结构,主要有弹栈,入栈两种操作 6 * 由于该栈是由数组实现的,数组的长度是固定的,当栈空间不足时, 7 * 必须将原数组数据复制到一个更长的数组中, 8 * 考虑到入栈时或许需要进行数组复制,平均需要复制N/2个数据项, 9 * 故入栈的时间复杂度为O(N),出栈的时间复杂度依然为O(1) 10 * @author bink

JAVA简单Swing图形界面应用示例

package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗口 * @author lenovo * */ public class HelloSwing { public static void main(String[] args) { JFrame frame=new JFrame("hello Swing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO

Java数据库操作类演示

只在mysql上测试过,不知道算不算好使?1. [代码][Java]代码     package org.load.demo; import java.io.IOException;import java.util.List;import java.util.Map; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRe

十一:Java之GUI图形Awt和Swing

一. AWT和 Swing AWT 和 Swing 是 Java 设计 GUI用户界面的基础.与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件.正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用.所以一开始使用AWT 的程序员很快就转向使用 Swing 了. 那为什么 AWT组件没有消亡呢?因为 Swing 是架构在 AWT 之上的,没有 AWT 就没有Swing.所以程序员可以根据自己的习惯选择使用 AWT 或者是 Swing.但是,最好不要二者混