繁体   English   中英

JFrame和ActionListener

[英]JFrame and ActionListener

我是Java的新手,而我在Swing中制作的游戏存在问题。 我有一个guiPulUp类,它具有按钮和一个文本字段。 按钮之一是“魔术”。 我试图做到这一点,所以如果您单击Magic按钮,则会出现一个带有预设“ Spell”按钮的JFrame(另一个名为guiPullUpMagic)。 那有可能吗? 还是还有一种使用.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
            }
        }
    }
}

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

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

注意更改

  1. ActionListenerGuiPullUp类中GuiPullUp
  2. GuiPullUpMagic类是JDialog
  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) {

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM