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 extendsMouseAdapter{12 JFrame fr=new JFrame("StackDemo");//对话框
13 JPanel pan= new JPanel();//菜单面板
14 JPanel panStack = newJPanel();15 JButton pushBtn, popBtn, peekBtn;16 JTextField tf= new JTextField("整数", 4);17 JButton stackBtn[]= new JButton[10];18
19 JPanel panStackPointerLabel= newJPanel();20 JLabel stackPointerLabel = new JLabel("
22 JPanel panRet= newJPanel();23 JTextField tfRet= new JTextField("操作结果!");24
25 inttop;26
27 publicstackDemo(){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(newpushAction());40 pan.add(popBtn=new JButton("出栈"));41 popBtn.addMouseListener(newpopAction());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(newFlowLayout(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 voidmouseClicked(MouseEvent e){73 tf.selectAll();//鼠标单击时选中全部文本
74 }75
76 //push 按钮监听器
77 class pushAction implementsMouseListener{78 public voidmouseClicked(MouseEvent e){79 String text;80
81 if((text=tf.getText())!=" "){82 for(int i=0; i
104 //pop按钮监听器
105 class popAction extendsMouseAdapter{106 public voidmouseClicked(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 voidmain(String args[]){122 stackDemo mySstackDemo = newstackDemo();123 }124 }