使用GUI的基于文本的冒险游戏具有能够从按下按钮继续的问题

时间:2013-06-19 15:37:58

标签: java swing user-interface

我正在尝试使用GUI为一个总结性项目制作基于Java的文本冒险游戏,我遇到的问题是当我按下选项A时,它将工作一次,之后不起作用。我没有添加任何选项B的东西,因为它没有任何好处,如果我没有办法让它工作在第一位。     import java.awt。*;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Project extends JFrame implements ActionListener {

private static final int WIDTH = 840;

private static final int HEIGHT = 480;



private JLabel gameText;

private JButton optionA, optionB, exitB;



private ExitButtonHandler ebHandler;



 public project()

 {

    gameText = new JLabel("<HTML><br>You wake up in a forest, there is a path which
 heads north. There also seems to be a old trail that leads deeper in the woods.</br>
 </html>");         


    optionA = new JButton("Head North");
    optionA.setActionCommand("optionA");
    optionA.addActionListener(this);
    optionB = new JButton("Go deeper into the forest.");
    optionB.setActionCommand("optionB");
    optionB.addActionListener(this);
    exitB = new JButton("Exit");

    ebHandler = new ExitButtonHandler();

    exitB.addActionListener(ebHandler);


    setTitle("Adventuregame");

    Container pane = getContentPane();

    pane.setLayout(new GridLayout(4, 2));




    pane.add(gameText);

    pane.add(optionA);

    pane.add(optionB);

    pane.add(exitB);



    setSize(WIDTH, HEIGHT);

    setVisible(true);

    setDefaultCloseOperation(EXIT_ON_CLOSE);

}
public void actionPerformed(ActionEvent e)
{

    if(e.getActionCommand().equals("optionA") )
    {
       gameText.setText("<HTML><br>You find yourself on the pathway to a major capital 
city, the walls of the kingdom head towards the sky and the gate is wide open, you can 
hear the sounds of busy life from inside the castle gates. As you head in, a guard 
confronts       
you and asks why you are there.</br></HTML>");
                   optionA.setText("I'm lost and trying to find my way.");
            optionB.setText("Ignore the guard");
             optionA.setActionCommand("optionA2");
             optionA.addActionListener(this);
             if(e.getActionCommand().equals("optionA2"))
    {
       gameText.setText("<HTML><br>The guard checks you for weapons, finding nothing he   
takes you to the tavern to find someone who may be able to help you out. In the Tavern     
there are some drunkards singing in the corner and a band of mercenaries on your right.
At the bar there is a older man whom you seem to reconise</br></HTML>");
                   optionA.setText("Go towards the Mercenaries.");
            optionB.setText("Go to the Older Man.");
             optionA.setActionCommand("optionA3");
             optionA.addActionListener(this);$

我正试图让它每次按下按钮时都会更新到下一个按钮 部分,目前我一直无法找到有关如何做到这一点的任何内容。

1 个答案:

答案 0 :(得分:1)

您在同一个类中设置了两个动作命令......好吧,动作命令将根据上下文使用不同的命令,对吧?然后,您需要为这些情况设置不同的侦听器。在类中创建一个对象是(以我的拙见)冗长和堆消耗。你可以试试这个:

    public class Project {
       //do your stuff for the class here and, in the constructor...
       public Project(){
         this.optionA = new JButton("First option.");
         this.optionB = new JButton("Second option.");
         this.optionA.setActionListener(new ActionListener(){
             // enter the code for the optionA listener.
         });
         this.optionB.setActionListener(new ActionListener(){
             // enter the code for the optionB listener.
         });
       }
    }

如果您想要更改它,只需在需要时重置动作侦听器。

正如nachokk所说,重写你的构造函数以与类名配对,否则你会收到错误。

另一件事......将这个游戏分成不同的对象,保持其私密状态,并使扩展和维护变得容易,这将是一件好事。

相关问题