0

我是 java 的新手,我在 Swing 中制作的游戏遇到了问题。我有一个类 guiPulUp,它有按钮和一个文本字段。其中一个按钮是“魔术”。我正在努力做到这一点,因此如果您单击 Magic 按钮,则会出现一个 JFrame,另一个称为 guiPullUpMagic,并带有预设的“Spell”按钮。这甚至可能吗?或者还有一种方法可以使用 .setVisible 在单击时使拼写 GUI 可见?请帮忙!我在互联网上找不到与此相关的任何主题。谢谢!(如果有任何其他错误,请告诉我)另外,我对如何让一个类中的变量在另一个类中工作感到非常困惑,例如让我的 JButton“buttonMAGIC”在我的 guiPullUpMagic 类中工作。

供参考,这是我的代码(它非常大!):


import javax.swing.*;

import java.lang.Math.*;

import java.awt.event.*;

/**
 * main GUI class
 */

public class guiPullUp extends JFrame
{

    public static void main(String[] args)
    {
        new guiPullUp();
    }

    //declaring buttons for main GUI

    private JButton buttonOK;
    private JButton buttonUP;
    private JButton buttonDOWN;
    private JButton buttonRIGHT;
    private JButton buttonLEFT;
    private JButton buttonMAGIC;
    private JButton buttonRUN;
    private JTextField userINPUT;
    private JLabel healthDisplay;

    public guiPullUp()
    {
        this.setSize(600,500);
        this.setTitle("Xenix V_1");
        this.setDefaultCloseOperation(
            JFrame.EXIT_ON_CLOSE);

         //button names to appear on panel1*
         //*button coordinates needed

         JButton buttonOK = new JButton ("OK");
        JButton buttonUP = new JButton ("Up");
        JButton buttonDOWN = new JButton ("Down");
        JButton buttonRIGHT = new JButton ("Right");
        JButton buttonLEFT = new JButton ("Left");
        JButton buttonMAGIC = new JButton ("Magic");
        JButton buttonRUN = new JButton ("RUN");
        JTextField userINPUT = new JTextField(30);
        JLabel healthDisplay = new JLabel("Health:  ");
        JPanel panel1 = new JPanel ();

        ButtonListener bl = new ButtonListener();

         buttonOK.addActionListener(bl);
         buttonUP.addActionListener(bl); 
         buttonDOWN.addActionListener(bl);
         buttonRIGHT.addActionListener(bl);
         buttonLEFT.addActionListener(bl);
         buttonMAGIC.addActionListener(bl); 
         buttonRUN.addActionListener(bl);


         panel1.add(buttonOK);
         panel1.add(buttonDOWN);
         panel1.add(buttonRIGHT);
         panel1.add(buttonLEFT);
         panel1.add(buttonMAGIC);
         panel1.add(buttonRUN);

         panel1.add(healthDisplay);

         panel1.add(userINPUT);

         this.add(panel1);

         this.setVisible(true);
        }       


     //declaring variables "counters" for magic count, 
    //health count, etc.

    int healthMAX = 100;
    int healthMINIMUM = 0;
    int magicMAX = 100;
    int magicMINIMUM = 0;
    int walletSizeMAX = 9999;
    int walletSizeMINIMUM = 0;

    /** 
     * class used to create events
     * based on button sources
     */


    public class ButtonListener implements
        ActionListener
    {

        public void actionPerformed (ActionEvent e)
        {
            //Haven't made these codes yet but some WILL need to bring up a GUI
                }

        }
    }
}

guiPullUpMagic 类:


import javax.swing.*;

import java.awt.event.*;

import java.lang.Math.*;

/**
* class used to pull up the "spells" GUI
*/

public class guiPullUpMagic extends JFrame
{
    public void magic(String[] args)
    {
        new guiPullUpMagic();
    }

    private JButton buttonFIREMAGIC;
    private JButton buttonICEMAGIC;
    private JButton buttonHEALMAGIC;
    private JButton buttonSHOCKMAGIC;

    public guiPullUpMagic()
    {
        this.setSize(400,400);
        this.setTitle("Spells");
        this.setDefaultCloseOperation(
            JFrame.EXIT_ON_CLOSE);

        //button names to appear on panel2*
        //*button coordinates needed

        JButton buttonFIREMAGIC = new JButton ("FireBall");
        JButton buttonICEMAGIC = new JButton ("Ice Flurry");
        JButton buttonSHOCKMAGIC = new JButton ("Spark");
        JButton buttonHEALMAGIC = new JButton ("Heal Minor Wounds");
        JPanel panel2 = new JPanel();

        ButtonListener bl = new ButtonListener();

        buttonFIREMAGIC.addActionListener(bl);
        buttonICEMAGIC.addActionListener(bl);
        buttonSHOCKMAGIC.addActionListener(bl);
        buttonHEALMAGIC.addActionListener(bl);

        panel2.add(buttonFIREMAGIC);
        panel2.add(buttonICEMAGIC);
        panel2.add(buttonSHOCKMAGIC);
        panel2.add(buttonHEALMAGIC);

        this.add(panel2);

        this.setVisible(false);     
    }

    public class ButtonListener implements
        ActionListener
    {

        public void actionPerformed (ActionEvent e)
        {
            if (e.getSource() == buttonMAGIC); //THIS is where I'll need
                                                           //the buttonMAGIC variable
                                                           //from guiPullUp
            {
                    //code to bring up the guiPullUpMagic GUI
            }
        }
    }
}
4

2 回答 2

3

如果要将 JFrame 的字段传递给另一个 JFrame,则可以使用该控件将 ComponentEvent 发送到该 jframe

例如,您可以定义一个 ComponentEvent(例如 ShowPopUpEvent)来显示 JFrame A,并且 A 会监听它。每当您想显示 a 并将该 JButton 传递给 a 时,您都可以调度该事件。

于 2016-06-16T20:26:45.073 回答
0

注意变化

  1. ActionListener在类中实现GuiPullUp
  2. GuiPullUpMagicJDialog
  3. 检查方法actionPerformed

GuiPullUp 类:

public class GuiPullUp extends JFrame implements ActionListener {

//declaring buttons for main GUI
private JButton buttonOK;
private JButton buttonUP;
private JButton buttonDOWN;
private JButton buttonRIGHT;
private JButton buttonLEFT;
private JButton buttonMAGIC;
private JButton buttonRUN;
private JTextField userINPUT;
private JLabel healthDisplay;

public GuiPullUp() {
    this.setSize(600, 500);
    this.setTitle("Xenix V_1");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    buttonOK = new JButton("OK");
    buttonUP = new JButton("Up");
    buttonDOWN = new JButton("Down");
    buttonRIGHT = new JButton("Right");
    buttonLEFT = new JButton("Left");
    buttonMAGIC = new JButton("Magic");
    buttonRUN = new JButton("RUN");
    userINPUT = new JTextField(30);
    healthDisplay = new JLabel("Health:  ");
    JPanel panel1 = new JPanel();


    buttonOK.addActionListener(this);
    buttonUP.addActionListener(this);
    buttonDOWN.addActionListener(this);
    buttonRIGHT.addActionListener(this);
    buttonLEFT.addActionListener(this);
    buttonMAGIC.addActionListener(this);
    buttonRUN.addActionListener(this);


    panel1.add(buttonOK);
    panel1.add(buttonDOWN);
    panel1.add(buttonRIGHT);
    panel1.add(buttonLEFT);
    panel1.add(buttonMAGIC);
    panel1.add(buttonRUN);

    panel1.add(healthDisplay);

    panel1.add(userINPUT);

    this.add(panel1);


}
//declaring variables "counters" for magic count, 
//health count, etc.
int healthMAX = 100;
int healthMINIMUM = 0;
int magicMAX = 100;
int magicMINIMUM = 0;
int walletSizeMAX = 9999;
int walletSizeMINIMUM = 0;

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals(buttonMAGIC.getActionCommand())) {
        new GuiPullUpMagic(this).setVisible(true);
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            GuiPullUp guiPullUp = new GuiPullUp();
            guiPullUp.setVisible(true);
        }
    });
}
}

类 GuiPullUpMagic

public class GuiPullUpMagic extends JDialog implements ActionListener {

    private JButton buttonFIREMAGIC;
    private JButton buttonICEMAGIC;
    private JButton buttonHEALMAGIC;
    private JButton buttonSHOCKMAGIC;

    public GuiPullUpMagic(JFrame parent) {
        super(parent);
        this.setSize(400, 400);
        this.setTitle("Spells");

        buttonFIREMAGIC = new JButton("FireBall");
        buttonICEMAGIC = new JButton("Ice Flurry");
        buttonSHOCKMAGIC = new JButton("Spark");
        buttonHEALMAGIC = new JButton("Heal Minor Wounds");
        JPanel panel2 = new JPanel();



        buttonFIREMAGIC.addActionListener(this);
        buttonICEMAGIC.addActionListener(this);
        buttonSHOCKMAGIC.addActionListener(this);
        buttonHEALMAGIC.addActionListener(this);

        panel2.add(buttonFIREMAGIC);
        panel2.add(buttonICEMAGIC);
        panel2.add(buttonSHOCKMAGIC);
        panel2.add(buttonHEALMAGIC);

        this.add(panel2);
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}
于 2013-07-26T05:39:12.710 回答