java - 重置按钮java

标签 java swing jbutton reset

我正在使用 Model View Controller 算法创建一个。如果我在 Controller 类中定义了 JButton 的实例。例如,我有:一个用于重置、退出、撤消、重做和设置的按钮。

我已经实现了他们的actionListeners。在我的 Controller 类中,是 actionPerformed() 方法所在的位置。我实现了所有 5 个按钮。现在按钮已设置为启用。但是,当重做和撤消被禁用并且我按下重置按钮时,它们将保持禁用状态。如何重置重做和撤消按钮的状态。

这是我的 GameController 类,特别是 actionPerformed:

public void actionPerformed(ActionEvent e)  {
    if (e.getSource() instanceof DotButton) {
        try {
            undo.push((GameModel) gameModel.clone());
        } catch (CloneNotSupportedException g) {
            g.printStackTrace();
        }
        if(gameModel.getNumberOfSteps()==0){
            int row = ((DotButton)(e.getSource())).getRow();
            int column = ((DotButton)(e.getSource())).getColumn();
            gameModel.capture(row,column);
            gameModel.step();
        }
        selectColor(((DotButton)(e.getSource())).getColor());
    } else if (e.getSource() instanceof JButton) {
        JButton clicked = (JButton)(e.getSource());

        if (clicked.getText().equals("Quit")) {
            /*try {
                serialization.serialize(gameModel, "savedGame.ser");
            } catch (IOException f) {
                f.printStackTrace();
            }*/
             System.exit(0);
         } else if (clicked.getText().equals("Reset")){
            reset();
            if (clicked.getText().equals("Redo")) {
                clicked.setEnabled(true);
            }
            if (clicked.getText().equals("Undo")) {
                clicked.setEnabled(true);
            }
         } else if (clicked.getText().equals("Redo")) {
            if (redo.isEmpty()) {
                clicked.setEnabled(false);
            }
            try {
                redo();
            } catch (CloneNotSupportedException g) {
                g.printStackTrace();
            }
        }
         else if (clicked.getText().equals("Undo")) {
            if (undo.isEmpty()) {
                clicked.setEnabled(false);
            }
            try {
                undo();
            } catch (CloneNotSupportedException g) {
                g.printStackTrace();
            }
         }
        else if (clicked.getText().equals("Settings")) {
            gameView.settingsMenu();
        }
    } else if (e.getSource() instanceof JRadioButton) {
        JRadioButton clickedR = (JRadioButton)(e.getSource());
        if (clickedR.getText().equals("Torus")) {
            setting1 = true;
        }
        if (clickedR.getText().equals("Diagonal")) {
            setting2 = true;
        }
    }

这是我创建按钮的 GameView 类:

public GameView(GameModel model, GameController gameController){
    super("Flood it -- the ITI 1121 version");

    this.gameModel = model;

    this.gameController = gameController;

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBackground(Color.WHITE);

    JPanel panel = new JPanel();
    panel.setBackground(Color.WHITE);
    panel.setLayout(new GridLayout(gameModel.getSize(), gameModel.getSize()));
    panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 0, 20));
    board = new DotButton[gameModel.getSize()][gameModel.getSize()];

    for (int row = 0; row < gameModel.getSize(); row++) {
        for (int column = 0; column < gameModel.getSize(); column++) {
            board[row][column] = new DotButton(row, column, gameModel.getColor(row,column), 
                (gameModel.getSize() < 26 ? DotButton.MEDIUM_SIZE : DotButton.SMALL_SIZE));
            board[row][column].addActionListener(gameController);
            panel.add(board[row][column]);
        }
    }

    add(panel, BorderLayout.CENTER);
    buttons = new JButton[5];
    buttons[0] = new JButton("Reset");
    buttons[1] = new JButton("Quit");
    buttons[2] = new JButton("Undo");
    buttons[3] = new JButton("Redo");
    buttons[4] = new JButton("Settings");
    for (JButton button : buttons) {
        button.setFocusPainted(false);
        button.addActionListener(gameController);
    }

    JPanel settingsPanel = new JPanel();
    settingsPanel.setBackground(Color.WHITE);
    settingsPanel.add(buttons[2]);
    settingsPanel.add(buttons[3]);
    settingsPanel.add(buttons[4]);

    JPanel control = new JPanel();
    control.setBackground(Color.WHITE);
    scoreLabel = new JLabel();
    control.add(scoreLabel);
    control.add(buttons[0]);
    control.add(buttons[1]);


    add(settingsPanel, BorderLayout.NORTH);
    add(control, BorderLayout.SOUTH);
    pack();
    setVisible(true);
}

我应该在 GameController 类以及 GameView 中创建 JButton 实例吗?

最佳答案

这个条件永远不可能满足

} else if (clicked.getText().equals("Reset")){
    reset();
    if (clicked.getText().equals("Redo")) {

如果第一个 if 语句为 true,则第二个语句永远不可能为 true

关于java - 重置按钮java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037325/

相关文章:

java - 如何在 Android 2.1 中实现类似 Beluga 或 WhatsApp 的消息系统

java - 无法更改 Java 中 JTextArea 中的文本

java - 每次单击时创建包含 JTextField、JComboBox 和 JButton 的新行

java - 如何关闭由 java swing 应用程序创建的所有进程?

java - 是否存在依赖 Artifact 的 Maven "compiler-only"范围

java - 如何从 Windows 命令行中的类路径中排除特定的 jar 文件?

Java Swing : How to remove the default-spacing for JButtons in a JPanel

java - 如何序列化 JButton [ ]

java - 为什么JButton不压抑?

java - Maven:在不同源级别上进行编译和测试