⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showhanoiframe.java~3~

📁 自己写的汉诺塔java程序。通过调用ShowHanoiFrame开启主界面及可运行程序。软件语言java
💻 JAVA~3~
📖 第 1 页 / 共 2 页
字号:
package TowersOfHanoi;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;

//主界面
public class ShowHanoiFrame extends JFrame implements MouseListener{

    Container cp;
    JMenuBar menuBar;
    JToolBar bar;

    JLabel newLabel;
    JLabel openLabel;
    JLabel saveLabel;
    JLabel startLabel;
    JLabel pauseLabel;
    JLabel stopLabel;
    JLabel setupLabel;
    JLabel messageLabel;

    //Thread thread;
    private HannoiTowerPanel tower = null;
    char towerName[] = {'A','B','C'};
    private int numDisks=4;
    private int speed=10;

    public ShowHanoiFrame() {
        super("汉诺塔演示界面");

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {}

        tower = new HannoiTowerPanel(numDisks,towerName,speed,Integer.MIN_VALUE);

        setSize(480, 400);
        setLocation(250, 150);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                if (JOptionPane.showConfirmDialog(null, "确定退出汉诺塔演示界面?", "确认退出",
                                                  JOptionPane.OK_CANCEL_OPTION,
                                                  JOptionPane.WARNING_MESSAGE) ==
                    JOptionPane.OK_OPTION) {
                    System.exit( -1);
                }
            }
        });

        init();
        setJMenuBar(menuBar);
        cp = getContentPane();
        cp.add(tower,BorderLayout.CENTER);
        cp.add(bar, BorderLayout.NORTH);
        setResizable(false);
        validate();
        setVisible(true);
    }

    public void init() {
        //构造menuBar
        //构造文件fileMenu
        JMenu fileMenu = new JMenu("文件");
        JMenuItem newFileItem = new JMenuItem("新建");
        newFileItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
                KeyEvent.CTRL_MASK, false));
        JMenuItem openItem = new JMenuItem("打开");
        openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                KeyEvent.CTRL_MASK, false));
        JMenuItem saveItem = new JMenuItem("保存");
        saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
                KeyEvent.CTRL_MASK, false));
        JMenuItem exitItem = new JMenuItem("退出");
        exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
                KeyEvent.CTRL_MASK, false));

        newFileItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                stop();
            }
        });
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String fileName = openFile();
                    if (fileName != null) {
                        FileInputStream fis = new FileInputStream(fileName);
                        ObjectInputStream ois = new ObjectInputStream(fis);
                        HannoiTowerPanel hannoi = (HannoiTowerPanel) ois.
                                                  readObject();
                        ois.close();
                        tower.setMyThreadStop();
                        ShowHanoiFrame.this.remove(tower);
                        tower = new HannoiTowerPanel(hannoi.getNumDisks(),
                                towerName, 0,
                                hannoi.getThreadState());
                        tower.getMyThread().start();
                        cp.add(tower, BorderLayout.CENTER);
                        validate();
                    }
                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            }
        });
        saveItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String fileName = saveFile();
                    if (fileName != null) {
                        FileOutputStream fos = new FileOutputStream(fileName+".dat");
                        ObjectOutputStream oos = new ObjectOutputStream(fos);
                        oos.writeObject(tower);
                        oos.flush();
                        fos.close();
                    }
                } catch (Exception ee) {}
            }
        });
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit( -1);
            }
        });

        fileMenu.add(newFileItem);
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(new JSeparator(JSeparator.HORIZONTAL));
        fileMenu.add(exitItem);

        //构造文件operateMenu
        JMenu operateMenu = new JMenu("操作");
        JMenuItem startItem = new JMenuItem("开始");
        startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
                KeyEvent.CTRL_MASK, false));
        JMenuItem pauseItem = new JMenuItem("暂停");
        pauseItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
                KeyEvent.CTRL_MASK, false));
        JMenuItem stopItem = new JMenuItem("停止");
        stopItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,
                KeyEvent.CTRL_MASK, false));
        JMenuItem setupItem = new JMenuItem("设置");
        setupItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
                KeyEvent.CTRL_MASK, false));

        startItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (tower.getMyThread().isAlive()) {
                synchronized (tower.getMyThread()) {
                    tower.setLimitState(Integer.MIN_VALUE);
                    tower.setSpeed(speed);
                    tower.setPause(false);
                    tower.getMyThread().notify();
                }
            }else{
                play();
            }
            }
        });
        pauseItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pauseThread();
            }
        });
        stopItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                stop();
            }
        });
        setupItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new SetupWindow(ShowHanoiFrame.this);
            }
        });

        operateMenu.add(startItem);
        operateMenu.add(pauseItem);
        operateMenu.add(stopItem);
        operateMenu.add(new JSeparator(JSeparator.HORIZONTAL));
        operateMenu.add(setupItem);

        //构造文件helpMenu
        JMenu helpMenu = new JMenu("帮助");
        JMenuItem aboutItem = new JMenuItem("关于(A)");
        aboutItem.setMnemonic(KeyEvent.VK_A);

        aboutItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showConfirmDialog(ShowHanoiFrame.this, "土木水利学院 水力学及河流动力学专业 \n  作者:王艳君-20706162", "作者信息",
                          JOptionPane.CLOSED_OPTION,JOptionPane.INFORMATION_MESSAGE);
            }
        });

        helpMenu.add(aboutItem);

        //构造menuBar
        menuBar = new JMenuBar();
        menuBar.add(fileMenu);
        menuBar.add(operateMenu);
        menuBar.add(helpMenu);

        //构造工具栏
        bar = new JToolBar();
        Color barColor = bar.getBackground();
        bar.setBorder(BorderFactory.createEtchedBorder());
        bar.setFloatable(false);
        bar.setLayout(new BoxLayout(bar, BoxLayout.X_AXIS));
        newLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/new.gif")));
        newLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        newLabel.setToolTipText("新建");
        newLabel.setBackground(barColor);
        newLabel.addMouseListener(this);
        openLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/open.gif")));
        openLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        openLabel.setToolTipText("打开");
        openLabel.setBackground(barColor);
        openLabel.addMouseListener(this);
        saveLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/save.gif")));
        saveLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        saveLabel.setToolTipText("保存");
        saveLabel.setBackground(barColor);
        saveLabel.addMouseListener(this);

        startLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/play.gif")));
        startLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        startLabel.setToolTipText("开始");
        startLabel.setBackground(barColor);
        startLabel.addMouseListener(this);
        pauseLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/pause.gif")));
        pauseLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        pauseLabel.setToolTipText("暂停");
        pauseLabel.setBackground(barColor);
        pauseLabel.addMouseListener(this);
        stopLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/stop.gif")));
        stopLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        stopLabel.setToolTipText("停止");
        stopLabel.setBackground(barColor);
        stopLabel.addMouseListener(this);
        setupLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/setup.gif")));
        setupLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        setupLabel.setToolTipText("设置");
        setupLabel.setBackground(barColor);
        setupLabel.addMouseListener(this);
        messageLabel = new JLabel(new ImageIcon(getClass().getResource(
                "face/help.gif")));
        messageLabel.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
        messageLabel.setToolTipText("作者信息");
        messageLabel.setBackground(barColor);
        messageLabel.addMouseListener(this);

        bar.addSeparator();
        bar.add(newLabel);
        bar.add(openLabel);
        bar.add(saveLabel);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -