2013-07-27 41 views
0

我似乎无法更改ActionListener中的JButton ActionCommand。我试图通过更改ActionCommand多次使用相同的两个按钮,但这似乎不起作用。 这里是我的代码,希望你能帮助:无法更改ActionListener中的JButton 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>"); 
       } 
     } 
    } 

} 
+0

为了更好地帮助越早,张贴[SSCCE(http://sscce.org/)。顺便说一句 - *“当你走路时,你往下看。”*应该是*“当你走路时,你往下看。”* –

+0

它仍然处于开发阶段,这不是问题 – Cj1m

+0

*“它仍然处于开发阶段,“*这是否意味着”不,我不想更快得到更好的帮助?“ *“这不是问题”*因此,我的'不是一个答案' - 这是***评论***的目的。 –

回答

2

只有一个,你做的东西,如果动作命令是"but3""but4"的地方,这个地方是以下if块内:

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

显然,动作命令不可能是"but2""but3""but4"。它是一个或另一个。

所以下面if块的条件将始终评估为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"的情况。

+0

那么我怎么能设置我的JButton有一个不同的ActionCommand? – Cj1m

+0

你已经在做。问题不在改变动作命令。当事件有这个新的动作命令时,它正在执行actionPerformed。目前,你的代码只处理两个动作命令:but1和but2。对于所有其他动作命令,它不会执行任何操作。 –

+0

哦,对了,谢谢你解释我现在明白我的问题!谢谢! – Cj1m

0

你无法到达的代码

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?"); 
    } 

这一部分,在这儿,你叫ChangeAction()。 使用system.out.println("inside else");进行测试,您将看到该行永远不会被打印。

你需要的地方使用ChangeAction()一日2中,如果statments