用java语言的swing类编写一个图形化的堆栈Stack的演示程序,实现演示程序的功能
时间: 2024-04-30 14:17:48 浏览: 9
好的,我会尽量详细地为您解答。首先,您需要了解一下 Java Swing 的基本概念和使用方法,以及堆栈(Stack)的相关知识。
在 Java Swing 中,可以使用 JFrame 类来创建一个窗口,然后向窗口中添加各种组件,如按钮、标签、文本框等等。为了实现堆栈的演示功能,我们需要添加一个文本域(JTextArea)和两个按钮(压入、弹出)。
接下来,我们需要定义一个 Stack 类来实现堆栈的基本操作,如压入数据、弹出数据、查看栈顶元素等等。代码如下:
```java
public class Stack {
private int[] data;
private int top;
public Stack(int size) {
data = new int[size];
top = -1;
}
public boolean isEmpty() {
return top == -1;
}
public boolean isFull() {
return top == data.length - 1;
}
public void push(int value) {
if (isFull()) {
throw new RuntimeException("Stack is full");
}
data[++top] = value;
}
public int pop() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty");
}
return data[top--];
}
public int peek() {
if (isEmpty()) {
throw new RuntimeException("Stack is empty");
}
return data[top];
}
}
```
在上面的代码中,我们定义了一个数组来存储堆栈的数据,top 表示当前栈顶的位置。isEmpty() 和 isFull() 方法分别用来判断堆栈是否为空和是否已满;push() 方法用来压入数据;pop() 方法用来弹出数据;peek() 方法用来查看栈顶元素。
接下来,我们可以使用上面定义的 Stack 类来实现堆栈的演示程序。代码如下:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class StackDemo extends JFrame {
private JTextArea textArea;
private JButton pushButton;
private JButton popButton;
private Stack stack;
public StackDemo() {
stack = new Stack(10);
textArea = new JTextArea(10, 20);
textArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(textArea);
pushButton = new JButton("Push");
pushButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int value = (int) (Math.random() * 100);
stack.push(value);
textArea.append("Pushed " + value + "\n");
}
});
popButton = new JButton("Pop");
popButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
int value = stack.pop();
textArea.append("Popped " + value + "\n");
} catch (RuntimeException ex) {
JOptionPane.showMessageDialog(StackDemo.this, ex.getMessage());
}
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(pushButton);
buttonPanel.add(popButton);
getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new StackDemo();
}
}
```
在上面的代码中,我们创建了一个 StackDemo 类,并在其中定义了一个 Stack 对象、一个文本域和两个按钮。在 pushButton 的事件处理方法中,我们随机生成一个数并使用 push() 方法将其压入堆栈,并在文本域中显示相关信息。在 popButton 的事件处理方法中,我们使用 pop() 方法从堆栈中弹出一个数,并在文本域中显示相关信息。如果堆栈为空,则会弹出一个对话框提示用户。
最后,我们在 main() 方法中创建一个 StackDemo 对象,即可启动堆栈的演示程序。