java - 无法更改 ActionListener 内的 JButton ActionCommand

标签 java swing action jbutton actionlistener

我似乎无法更改 ActionListener 内的 JButton ActionCommand。我试图通过更改 ActionCommand 多次使用相同的两个按钮,但这似乎不起作用。 这是我的代码,希望对您有所帮助:

void ChangeAction() {
    storyButn1.setActionCommand("but3");
    storyButn2.setActionCommand("but4");
}

public Main() {

    story.setText("<html>You wake up with a sore head in a dark forest. You can't remember anything, except from the word H.E.L.P. You see a light in the distance, What to do? </html>");

    storyButn1.addActionListener(this);
    storyButn1.setActionCommand("but1");

    storyButn2.addActionListener(this);
    storyButn2.setActionCommand("but2");

    Box Layout = new Box(BoxLayout.Y_AXIS);
    Layout.add(story);
    Layout.setSize(story.getWidth() + 10, story.getHeight());

    frame.setVisible(true);
    frame.setSize(400, 200);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.add(Layout, BorderLayout.CENTER);
    frame.add(storyButn1);
    frame.add(storyButn2);
    frame.setTitle("Text Adventure");

    frame.setLayout(new GridLayout(3, 2, 5, 5));
    frame.getContentPane().setBackground(Color.lightGray);

}

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("but1")) {
        random = (int) (Math.round(Math.random()) * 10);
        if (random == 10) {
            story.setText("<html>You run towards the light source. It's dark and you don't see that root in the ground. You break your ankle!</html>");
            storyButn1
                    .setText("<html>Lay against a tree and hope for the best?</html>");
            storyButn2.setText("<html>Call out for help?</html>");
        } else {
            story.setText("<html>You walk carefully towards the light source, When you reach it, you find that it is a torch.</html>");
            storyButn1.setText("Pick it up?");
            storyButn2.setText("Switch it off?");
        }
    }
    if (e.getActionCommand().equals("but2")) {
        random = (int) (Math.round(Math.random()) * 20);
        if (random == 20) {
            story.setText("<html>You are near the top of the tree when your foot slips. You go plummeting back into the darkness, never to be seen again.");
            storyButn1.setText("Retry?");
            storyButn2.setText("Retry?");
            if (e.getActionCommand().equals("but1") || e.getActionCommand().equals("but2")) {
                this.dispose();
                frame.setVisible(false);
                new Main();             
            }
        } else {
            story.setText("<html>You successfully climb to the top of the tree where you find a safe spot to sit. You stay there for a while, *BANG*, You hear something in the distance!</html>");
            ChangeAction();
            storyButn1.setText("Climb down and investigate?");
            storyButn2.setText("Follow the light source?");

                if(e.getActionCommand().equals("but3")){
                    story.setText("<html>You slowly climb down the tree. When you reach the bottom, you try to follow where you think the sound had come from. As your walking you look down. There is a loaded revolver with one bullet missing and a trail of blood.</html>");
                } else if(e.getActionCommand().equals("but4")){
                    story.setText("<html>You walk carefully towards the light source, When you reach it, you find that it is a torch.</html>");
                }
        }
    }

}

最佳答案

如果操作命令是 "but3""but4",则只有一个地方可以执行某些操作,并且该位置位于以下 if block 内:

if (e.getActionCommand().equals("but2")) {

显然, Action 命令不可能同时是"but2""but3""but4"。两者择其一。

因此以下 if block 的条件将始终计算为 false:

if(e.getActionCommand().equals("but3")){
    story.setText("<html>You slowly climb down the tree. When you reach the bottom, you try to follow where you think the sound had come from. As your walking you look down. There is a loaded revolver with one bullet missing and a trail of blood.</html>");
} else if(e.getActionCommand().equals("but4")){
    story.setText("<html>You walk carefully towards the light source, When you reach it, you find that it is a torch.</html>");
}

编辑:

回顾一下,actionPerformed() 方法如下所示:

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("but1")) {
        // do something
    }
    if (e.getActionCommand().equals("but2")) {
        // do something
    }
}

它不处理操作命令为 "but3""but4" 的情况。

关于java - 无法更改 ActionListener 内的 JButton ActionCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898491/

相关文章:

java - 无法将 JTextField 设置为 int

javascript - Ember 对 ='change' 事件的操作

java - 丰富 :simpleTogglePanel neither calls action nor actionListener

java - Integer.MAX_VALUE 是否存在任何并行问题

java - log4j:为同一文件设置不同的布局

java - 需要更改具有不同形状的 JButton 的颜色

php - 如何使用 html <form> action 属性调用 php 函数?

java - 重写 equals() 方法以检查共享继承的对象中的维度相等性

java - While 与 For 循环中的变量范围

java - 为什么我的 RadioButtons 和 JLabels 没有显示?