import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/*
指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件(比如 Button)生成此高级别事件。
事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。
所以在给TextField类添加 ActionListener 类型的监听器时就会失败! ****下面还有XXXListener和XXXAdapter的用法,相信你会喜欢上XXXAdapter的用法
*/
public class stackDemo extends MouseAdapter{
JFrame fr=new JFrame("StackDemo");//对话框
JPanel pan= new JPanel();//菜单面板
JPanel panStack = new JPanel();
JButton pushBtn, popBtn, peekBtn;
JTextField tf= new JTextField("整数", 4);
JButton stackBtn[]= new JButton[10]; JPanel panStackPointerLabel= new JPanel();
JLabel stackPointerLabel = new JLabel("<-top"); JPanel panRet= new JPanel();
JTextField tfRet= new JTextField("操作结果!"); int top; public stackDemo(){
fr.setSize(420,500);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); pan.setPreferredSize(new Dimension(400, 50));
pan.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
panStack.setPreferredSize(new Dimension(80, 350));//设置栈面板大小
panStack.setBackground(Color.yellow);
pan.setBackground(Color.blue);
pan.add(new JLabel("操作菜单:"));
pan.add(pushBtn=new JButton("进栈"));
pushBtn.addMouseListener(new pushAction());
pan.add(popBtn=new JButton("出栈"));
popBtn.addMouseListener(new popAction());
pan.add(peekBtn=new JButton("栈顶元素")); tf.addMouseListener(this);
pan.add(tf); for(int i=0; i<10; ++i){
stackBtn[i]=new JButton(" ");
panStack.add(stackBtn[i]);
}
fr.add(pan);
fr.add(panStack);
panStackPointerLabel.setLayout(null);
panStackPointerLabel.setPreferredSize(new Dimension(80, 350));//设置指针面板的大小
panStackPointerLabel.setBackground(Color.LIGHT_GRAY);
stackPointerLabel.setFont(new Font("华文行楷", Font.BOLD, 20));
panStackPointerLabel.add(stackPointerLabel); fr.add(panStackPointerLabel);
panRet.setLayout(new FlowLayout(FlowLayout.LEFT));
panRet.setBackground(Color.red);
panRet.setPreferredSize(new Dimension(400, 50)); tfRet.setEditable(false);//不能不编辑
panRet.add(tfRet);//操作结果面板
fr.add(panRet);
fr.setVisible(true);
stackPointerLabel.setBounds(0, stackBtn[9].getLocation().y, 50, 50);//设置栈顶指针位置
top=9;
} public void mouseClicked(MouseEvent e){
tf.selectAll();//鼠标单击时选中全部文本
} //push 按钮监听器
class pushAction implements MouseListener{
public void mouseClicked(MouseEvent e){
String text; if((text=tf.getText())!=" "){
for(int i=0; i<text.length(); ++i)
if(!Character.isDigit(text.charAt(i)))
return ;
}
if(top<0){
tfRet.setText("栈顶溢出!");
return ;
}
Point pt=stackBtn[top].getLocation();
stackBtn[top].setText(text);
tfRet.setText("进栈值" + text);
stackPointerLabel.setBounds(0, pt.y, 50, 50);
--top;
}
public void mouseDragged(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mousePressed(MouseEvent e){}
} //pop按钮监听器
class popAction extends MouseAdapter{
public void mouseClicked(MouseEvent e){
String text;
if(top>=9){
tfRet.setText("栈底溢出!");
return ;
}
++top;
Point pt=stackBtn[top].getLocation();
text=stackBtn[top].getText();
tfRet.setText("出栈值" + text);
stackBtn[top].setText(" ");
stackPointerLabel.setBounds(0, pt.y, 50, 50);
}
} public static void main(String args[]){
stackDemo mySstackDemo = new stackDemo();
}
}

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

  1. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  2. Java中的图形界面编程

    前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...

  3. Java概述和项目演示

    Java概述和项目演示 1. 软件开发学习方法 多敲 多思考 解决问题 技术文档阅读(中文,英文) 项目文档 多阅读源码 2. 计算机 简称电脑,执行一系列指令的电子设备 3. 硬件组成 输入设备:键 ...

  4. Java 技术栈

    JAVA是一个面向对象的编程语言,由SUN公司的程序员所开发.它不仅吸收了C++的各种优点,而且还撇弃了C++中难以理解的概念,如多继承.指针等:因此JAVA语言具有功能强大且简单易用两个特征, JA ...

  5. JVM运行时数据区--Java虚拟机栈

    虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 根据栈设计的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样 ...

  6. java技术栈:项目概述

    学习使用java到现在也有三年多了,这三年基本是以项目驱动的方式学习,有好有坏,个人觉得好处在于,有一个清晰的目标让你解决,这会让你学习非常迅速有效.当然坏处就是片面,不成体系.这种学习方式在学校以小 ...

  7. Ninja:Java全栈Web开发框架-Ninja中文网

    相信不少业界人士都还停留在SSh的时代 其实我想给大家推荐的一个轻量级框架那就是Ninja; Ninja是一个Java全栈Web开发框架,稳定.快速.非常高效. 商业价值 在你的下一个项目中,Ninj ...

  8. Java虚拟机栈和本地方法栈

    Java虚拟机栈的特征 线程私有 后进先出(LIFO)栈 存储栈帧,支持Java方法的调用.执行和退出 可能出现OutOfMemoryError异常和StackOverflowError异常 Java ...

  9. 剑指Offer——Java实现栈和队列的互模拟操作

    剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入 ...

随机推荐

  1. How to make your assembly more secure from referencing by unauthorized bits

    Now the security has a trend to become more and more important in our daily work, hence I did some r ...

  2. Linux 升级glibc-2.14 失败 我遇到的问题

    直接说步骤和流程: 1.到http://www.gnu.org/software/libc/下载最新版本,我这里下载了glibc-2.14.tar.gz 这个版本,解压到任意目录准备编译(/usr/l ...

  3. C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法

    C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...

  4. Unity3d刚体Rigidbody与碰撞检测Collider

    做了一个碰撞的小Demo,用一个球去撞击一堵墙,结果在球和墙都设置了刚体和碰撞体的情况下,球穿过了墙.移动球的位置,球有时能穿过墙,有时会被墙阻挡. 对于球穿过了墙,这个问题,在网上找了一下答案,基本 ...

  5. centos7安装mysql5.7

    http://jingyan.baidu.com/album/93f9803f010d8fe0e56f555e.html?picindex=15

  6. 跨域无法获取自定义header的问题

    同域的时候,header里面的参数可以随便自己定义.服务端都是可以获取的. 但是跨域的时候,除了设置 <add name="Access-Control-Allow-Origin&qu ...

  7. hadoop分布式存储(1)-hadoop基础概念(毕业设计)

    hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...

  8. OHSCE_V0.1.22 Beta,跨平台高可靠性通信框架

    Open HI-REL Signal Communication Engine(简称OHSCE)是一款高可靠性跨平台的PHP通信框架,Windows友好且同时支持Linux和OS X.对TCP.UDP ...

  9. 什么情况下才要重写Objective-C中的description方法

    特别注意: 千万不要在description方法中同时使用%@和self,同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用descrip ...

  10. 控制ASP.NET Web API 调用频率

    很多的api,例如GitHub’s API 都有流量控制的做法.使用速率限制,以防止在很短的时间量客户端向你的api发出太多的请求.例如,我们可以限制匿名API客户端每小时最多60个请求,而我们可以让 ...