📄 frame1.java~267~
字号:
package treeandbtreedemo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*; //swing组件事件响应ChangeListener
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
* @version 3.1图形界面的设计
* @version 3.2动画效果
* @version 4.2另外一种画图方式,图标表示节点。可移动(7.12)
*/
public class Frame1
extends JFrame
implements Runnable {
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JMenu jMenuHelp = new JMenu();
JMenuItem jMenuHelpAbout = new JMenuItem();
JLabel statusBar = new JLabel();
BorderLayout borderLayout1 = new BorderLayout();
JButton stop = new JButton();
FlowLayout flowLayout5 = new FlowLayout();
JPanel jPanel4 = new JPanel();
JSlider slider = new JSlider();
DrawLabelPanel drawTable = new DrawLabelPanel();
//JPanel draw = new JPanel();
FlowLayout flowLayout2 = new FlowLayout();
JButton binaryTreeInOrder = new JButton();
JButton auto = new JButton();
JButton binaryTreePostOrder = new JButton();
BorderLayout borderLayout4 = new BorderLayout();
JPanel panel = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel12 = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
JButton reset = new JButton();
JPanel input = new JPanel();
JPanel jPanel6 = new JPanel();
JButton binaryTreePreOrder = new JButton();
JPanel jPanel14 = new JPanel();
JTextField text = new JTextField();
JButton treePreOrder = new JButton();
JButton treePostOrder = new JButton();
ButtonGroup buttonGroup1 = new ButtonGroup();
JRadioButton jRadioButtonBT = new JRadioButton();
JRadioButton jRadioButtonTree = new JRadioButton();
FlowLayout flowLayout3 = new FlowLayout();
GridLayout gridLayout1 = new GridLayout();
FlowLayout flowLayout4 = new FlowLayout();
//画板
//DrawPanel drawTable = new DrawPanel();
//数据对象
private Table table = new Table(); //表格数据,记录了节点的坐标等信息
private Tree tree = new Tree(); //树
private BinaryTree binaryTree = new BinaryTree(); //二叉树
private Thread autoThread = new Thread(); //基本运行线程
private int index = -1;
private String now = new String(); //演示的状态,线程中要用到
private int fps = 10; //频率
private boolean travel = false;
//private String flag=new String("");//判断是遍历二叉树还是树
//Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel)this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(600, 540));
this.setTitle("Frame Title");
statusBar.setText(" ");
jMenuFile.setText("File");
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(new Frame1_jMenuFileExit_ActionAdapter(this));
jMenuHelp.setText("Help");
jMenuHelpAbout.setText("About");
jMenuHelpAbout.addActionListener(new Frame1_jMenuHelpAbout_ActionAdapter(this));
stop.setFont(new java.awt.Font("Dialog", 0, 15));
stop.setPreferredSize(new Dimension(73, 25));
stop.setActionCommand("pause");
stop.setText("stop");
stop.addActionListener(new Frame1_stop_actionAdapter(this));
flowLayout5.setAlignment(FlowLayout.RIGHT);
flowLayout5.setHgap(18);
flowLayout5.setVgap(5);
jPanel4.setLayout(gridLayout1);
slider.setOrientation(JSlider.HORIZONTAL);
slider.setInverted(false);
slider.setMinimum(1);
slider.setMaximum(20);
slider.setValue(10);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
slider.setPaintLabels(false);
slider.setPaintTicks(false);
slider.setPaintTrack(true);
slider.setAlignmentX( (float) 0.5);
slider.setDebugGraphicsOptions(0);
slider.setDoubleBuffered(false);
slider.setPreferredSize(new Dimension(195, 24));
slider.setRequestFocusEnabled(true);
slider.setToolTipText("" + slider.getValue());
slider.setVerifyInputWhenFocusTarget(true);
slider.addChangeListener(new ChangeListener() {
//这是一个Swing组件event响应内部类
public void stateChanged(ChangeEvent e) {
fps = slider.getValue();
}
});
drawTable.setBackground(Color.white);
drawTable.setDebugGraphicsOptions(0);
drawTable.setPreferredSize(new Dimension(300, 200));
drawTable.setLayout(null);
flowLayout2.setAlignment(FlowLayout.RIGHT);
flowLayout2.setHgap(20);
flowLayout2.setVgap(5);
binaryTreeInOrder.setFont(new java.awt.Font("Dialog", 0, 13));
binaryTreeInOrder.setAlignmentX( (float) 5.0);
binaryTreeInOrder.setActionCommand("inOrder");
binaryTreeInOrder.setText("中序遍历");
binaryTreeInOrder.addActionListener(new
Frame1_binaryTreeInOrder_actionAdapter(this));
// binaryTreeInOrder.addActionListener(new UI_binaryTreeInOrder_actionAdapter(this));
auto.setFont(new java.awt.Font("Dialog", 0, 15));
auto.setPreferredSize(new Dimension(73, 25));
auto.setText("auto");
auto.addActionListener(new Frame1_auto_actionAdapter(this));
binaryTreePostOrder.setFont(new java.awt.Font("Dialog", 0, 13));
binaryTreePostOrder.setAlignmentX( (float) 0.0);
binaryTreePostOrder.setActionCommand("postOrder");
binaryTreePostOrder.setText("后序遍历");
binaryTreePostOrder.addActionListener(new
Frame1_binaryTreePostOrder_actionAdapter(this));
// binaryTreePostOrder.addActionListener(new
//UI_binaryTreePostOrder_actionAdapter(this));
borderLayout4.setHgap(10);
borderLayout4.setVgap(5);
panel.setLayout(borderLayout4);
panel.setToolTipText("");
jPanel2.setBorder(null);
jPanel2.setPreferredSize(new Dimension(100, 50));
jPanel2.setLayout(flowLayout5);
flowLayout1.setHgap(10);
flowLayout1.setVgap(5);
reset.setFont(new java.awt.Font("Dialog", 0, 15));
reset.setPreferredSize(new Dimension(73, 25));
reset.setText("reset");
reset.addActionListener(new Frame1_reset_actionAdapter(this));
//binaryTreeStart.addActionListener(new UI_binaryTreeStart_actionAdapter(this));
input.setBorder(BorderFactory.createEtchedBorder());
input.setDebugGraphicsOptions(0);
input.setPreferredSize(new Dimension(470, 39));
input.setLayout(flowLayout3);
jPanel6.setDebugGraphicsOptions(0);
jPanel6.setPreferredSize(new Dimension(432, 49));
jPanel6.setLayout(flowLayout2);
binaryTreePreOrder.setFont(new java.awt.Font("Dialog", 0, 13));
binaryTreePreOrder.setPreferredSize(new Dimension(73, 29));
binaryTreePreOrder.setActionCommand("preOrder");
binaryTreePreOrder.setText("先序遍历");
binaryTreePreOrder.addActionListener(new
Frame1_binaryTreePreOrder_actionAdapter(this));
// binaryTreePreOrder.addActionListener(new
//UI_binaryTreePreOrder_actionAdapter(this));
jPanel14.setBorder(BorderFactory.createEtchedBorder());
jPanel14.setDebugGraphicsOptions(0);
jPanel14.setPreferredSize(new Dimension(470, 39));
jPanel14.setLayout(flowLayout1);
text.setDebugGraphicsOptions(0);
text.setDoubleBuffered(false);
text.setPreferredSize(new Dimension(330, 22));
text.setSelectionEnd(15);
text.setSelectionStart(11);
text.setText("");
text.addActionListener(new Frame1_text_actionAdapter(this));
//binaryTreeText.addActionListener(new UI_binaryTreetreeText_actionAdapter(this));
treePreOrder.setFont(new java.awt.Font("Dialog", 0, 13));
treePreOrder.setText("先根遍历");
treePreOrder.addActionListener(new Frame1_treePreOrder_actionAdapter(this));
treePostOrder.setFont(new java.awt.Font("Dialog", 0, 13));
treePostOrder.setText("后根遍历");
treePostOrder.addActionListener(new Frame1_treePostOrder_actionAdapter(this));
jPanel4.setPreferredSize(new Dimension(90, 274));
jRadioButtonBT.setFont(new java.awt.Font("Dialog", 0, 13));
jRadioButtonBT.setText("二叉树");
jRadioButtonBT.addActionListener(new Frame1_jRadioButtonBT_actionAdapter(this));
jRadioButtonTree.setFont(new java.awt.Font("Dialog", 0, 13));
jRadioButtonTree.setText("树");
jRadioButtonTree.addActionListener(new
Frame1_jRadioButtonTree_actionAdapter(this));
flowLayout3.setAlignment(FlowLayout.LEFT);
//jLabel1.setText("");
borderLayout1.setHgap(5);
borderLayout1.setVgap(5);
gridLayout1.setColumns(1);
gridLayout1.setRows(6);
gridLayout1.setVgap(10);
jMenuFile.add(jMenuFileExit);
jMenuHelp.add(jMenuHelpAbout);
jMenuBar1.add(jMenuFile);
jMenuBar1.add(jMenuHelp);
this.setJMenuBar(jMenuBar1);
contentPane.add(statusBar, BorderLayout.SOUTH);
contentPane.add(panel, BorderLayout.CENTER);
panel.add(jPanel12, BorderLayout.EAST);
panel.add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jPanel14, null);
jPanel14.add(reset, null);
jPanel14.add(stop, null);
jPanel14.add(auto, null);
jPanel14.add(slider, null);
jPanel4.add(binaryTreePreOrder, null);
jPanel4.add(binaryTreeInOrder, null);
jPanel4.add(binaryTreePostOrder, null);
jPanel4.add(treePreOrder, null);
jPanel4.add(treePostOrder, null);
panel.add(drawTable, BorderLayout.CENTER);
panel.add(jPanel6, BorderLayout.NORTH);
jPanel6.add(input, null);
input.add(jRadioButtonTree, null);
input.add(jRadioButtonBT, null);
input.add(text, null);
panel.add(jPanel4, BorderLayout.WEST);
buttonGroup1.add(jRadioButtonTree);
buttonGroup1.add(jRadioButtonBT);
}
//File | Exit action performed
public void jMenuFileExit_actionPerformed(ActionEvent e) {
System.exit(0);
}
//Help | About action performed
public void jMenuHelpAbout_actionPerformed(ActionEvent e) {
Frame1_AboutBox dlg = new Frame1_AboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.pack();
dlg.show();
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
jMenuFileExit_actionPerformed(null);
}
}
void jRadioButtonBT_actionPerformed(ActionEvent e) {
binaryTreePreOrder.setEnabled(true);
binaryTreeInOrder.setEnabled(true);
binaryTreePostOrder.setEnabled(true);
treePreOrder.setEnabled(false);
treePostOrder.setEnabled(false);
//flag = new String("BinaryTree");
}
void jRadioButtonTree_actionPerformed(ActionEvent e) {
binaryTreePreOrder.setEnabled(false);
binaryTreeInOrder.setEnabled(false);
binaryTreePostOrder.setEnabled(false);
treePreOrder.setEnabled(true);
treePostOrder.setEnabled(true);
//flag = new String("Tree");
}
void text_actionPerformed(ActionEvent e) {
table=new Table();//清空table上的记录
tree=new Tree();
binaryTree=new BinaryTree();
drawTable.removeAll();
drawTable.repaint();
if (jRadioButtonBT.isSelected() == true) { //二叉树
String s = text.getText();
binaryTree.creatBinaryTree(s); //建造树
if(binaryTree.creatSuccess==false) {//输入出错则弹出一个提示框
JDialog jDialog=new JDialog(this,"!!!",true);
//jDialog.setSize(200,70);
jDialog.setBounds(450,300,300,120);
JLabel l1=new JLabel("输入错误!");
JLabel l2=new JLabel(" 请输入一个三元组形式表示的二叉树!");
l1.setFont(new Font("Dialog", 0, 15));
l2.setFont(new Font("Dialog", 0, 15));
l1.setBounds(100,10,180,20);
l2.setBounds(40,100,180,40);
jDialog.show();
return;
}
table.getPaintTableWH(drawTable.getWidth(),drawTable.getHeight());//获得画板的宽度和高度
table.creatBinaryTreeTable(s);// 建表
//table = binaryTree.table; //表的赋值
drawTable.setTable(table); //drawPanel中的表成员的赋值
drawTable.initDrawLabelPanel();
drawTable.repaint(); //重画
drawTable.validate();
}
if (jRadioButtonTree.isSelected() == true) { //树
String s = text.getText();
tree.creatTree(s); //建造树
if(tree.creatSuccess==false) {//输入出错则弹出一个提示框
JDialog jDialog=new JDialog(this,"!!!",true);
//jDialog.setSize(200,70);
jDialog.setBounds(450,300,300,120);
JLabel l1=new JLabel("输入错误!");
JLabel l2=new JLabel(" 请输入一个二元组形式表示的树!");
l1.setFont(new Font("Dialog", 0, 15));
l2.setFont(new Font("Dialog", 0, 15));
l1.setBounds(100,10,180,20);
l2.setBounds(40,100,180,40);
jDialog.show();
return;
}
table.getPaintTableWH(drawTable.getWidth(),drawTable.getHeight());//获得画板的宽度和高度
table.creatTreeTable(s);// 建表
//table = tree.table; //表的赋值
drawTable.setTable(table); //drawPanel中的表成员的赋值
drawTable.initDrawLabelPanel();
drawTable.repaint(); //重画
}
}
void binaryTreePreOrder_actionPerformed(ActionEvent e) {
if (table.isEmpty() == true) {
return;
}
//使其他功能按钮不能使用
text.setEnabled(false);
binaryTreePreOrder.setEnabled(true);
binaryTreeInOrder.setEnabled(false);
binaryTreePostOrder.setEnabled(false);
treePreOrder.setEnabled(false);
treePostOrder.setEnabled(false);
binaryTreePreOrder.setText("下一步");
//binaryTree.preOrder();
table.changePathQueue( binaryTree.preOrder());
drawTable.setTable(table);
if (index < table.number) {
drawTable.setCurrent(++index);
drawTable.fillCurrent();
drawTable.unFillPreCurrent(index-1);
drawTable.paintBottomNode();
drawTable.repaint();
}
if (index == table.number) { //重新开始
index = -1;
drawTable.cleanBottonCircle();
//drawTable.unFillPreCurrent(0);
binaryTreePreOrder.setText("先序遍历");
binaryTreeInOrder.setText("中序遍历");
binaryTreePostOrder.setText("后序遍历");
binaryTreeInOrder.setEnabled(true);
binaryTreePostOrder.setEnabled(true);
}
}
void binaryTreeInOrder_actionPerformed(ActionEvent e) {
if (table.isEmpty() == true) {
return;
}
//使其他功能按钮不能使用
text.setEnabled(false);
binaryTreePreOrder.setEnabled(false);
binaryTreeInOrder.setEnabled(true);
binaryTreePostOrder.setEnabled(false);
treePreOrder.setEnabled(false);
treePostOrder.setEnabled(false);
binaryTreeInOrder.setText("下一步");
//binaryTree.inOrder(); //中序遍历
table.changePathQueue(binaryTree.inOrder());
drawTable.setTable(table);
if (index < table.number) {
drawTable.setCurrent(++index);
drawTable.fillCurrent();
drawTable.unFillPreCurrent(index-1);
drawTable.paintBottomNode();
drawTable.repaint();
}
if (index == table.number) { //重新开始
index = -1;
drawTable.cleanBottonCircle();
//drawTable.unFillPreCurrent(0);
binaryTreePreOrder.setText("先序遍历");
binaryTreeInOrder.setText("中序遍历");
binaryTreePostOrder.setText("后序遍历");
binaryTreePreOrder.setEnabled(true);
binaryTreePostOrder.setEnabled(true);
}
}
void binaryTreePostOrder_actionPerformed(ActionEvent e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -