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. bzoj2002弹(dan)飞绵羊 分块水过

    据说是道lct求深度的题 但是在小猫大的指点下用分块就n^1.5水过了 = =数据忘记加强系列 代码极其不美观,原因是一开始是听小猫大讲的题意,还以为是弹到最前面... #include <cs ...

  2. VirtualPathProvider的使用

    解决的问题,加载数据库中的UI public class Global : System.Web.HttpApplication { protected void Application_Start( ...

  3. 深入理解JavaScript中 fn() 和 return fn() 的区别

    在js中,经常会遇到在函数里调用其它函数的情况,这时候会有 fn() 这种调用方式,还有一种是 return fn() 这种调用方式,一些初学者经常会一脸萌逼地被这两种方式给绕晕了.这里用一个优雅的面 ...

  4. URL的截取问题

    $(function (){ if (window.location.href.includes('?')) { if (window.location.href.split('?')[1].spli ...

  5. bootstrap之强调文本的类(带颜色)

    bootstrap之强调文本的类(带颜色) <small>本行内容是在标签内</small><br> <strong>本行内容是在标签内</str ...

  6. C#编写windows服务

    项目要求: 数据库用有一张表,存放待下载文件的地址,服务需要轮训表将未下载的文件下载下来. 表结构如下: 过程: VS--文件-->新建项目-->windows-->windows服 ...

  7. JSP页面之间互相传值

    页面一: <s:if test="#list.sourceId==1">                            <a               ...

  8. php 图片上传的公共方法(按图片宽高缩放或原图)

    写的用于图片上传的公共方法类调用方法: $upload_name='pic';$type = 'logo_val';$file_name = 'logo_' . $user_id .create_st ...

  9. iOS开发——post异步网络请求封装

    IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的. 在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子.我这里要给出的封装代码,是异 ...

  10. 转:隐马尔可夫模型(HMM)攻略

    隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...