Java 试图通过单击Jbutton从另一个类打开新的Jframe

Java 试图通过单击Jbutton从另一个类打开新的Jframe,java,swing,jframe,jbutton,actionlistener,Java,Swing,Jframe,Jbutton,Actionlistener,(我刚开始用java编程。) 这是我的代码 Main: import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JFrame; public

(我刚开始用java编程。) 这是我的代码

Main:

    import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JFrame;

public class buttons {{


        /*Frame creation*/
        final JFrame frameKontrast = new JFrame();
        frameKontrast.setTitle("Main Menu");
        frameKontrast.setSize(500,350);
        frameKontrast.setLocationRelativeTo(null);
        frameKontrast.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



        /*JPanel creation*/
        JPanel panel = new JPanel ();                                                       
        panel.setLayout(new GridLayout(0, 1));                                              




        /*Okno dialogowe*/
        final JLabel dialog = new JLabel();                                                     
        dialog.setText("<html>Jestem bardzo długim bezsensownym dialogiem mam nawet kolejną bardzo długą bezsensowną część która istnieje tylko po to, by ten tekst był ow wiele, wiele dłuższy niż wszystkie inne oraz aby zmusić się do napisania skryptu ktory robi enter w tekście. Koniec.</html>");
        JMenuBar menuKontrast = new JMenuBar();
        frameKontrast.setJMenuBar(menuKontrast); 

        /*Przyciski wyboru*/
        final JButton przyciskb = new JButton();
        przyciskb.setText("Exit");



        final JButton przyciska = new JButton();                                                    
            przyciska.setText("Start the game");







        /*Rozwijane menu (zadania)*/
        JMenu objectives = new JMenu("Objectives");
        JMenuItem zad1 = new JMenuItem("Zadanie numer 1");
        JMenuItem zad2 = new JMenuItem("Zadanie numer 2");
        JMenuItem zad3 = new JMenuItem("Zadanie numer 3");




        /*Dołączanie obiektów do GUI*/
        panel.add(dialog);                                                                  
        menuKontrast.add(objectives);
        objectives.add(zad1);
        objectives.add(zad2);
        objectives.add(zad3);
        ButtonGroup group = new ButtonGroup();                                              
        group.add(przyciska);
        group.add(przyciskb);
        panel.add(przyciska);
        panel.add(przyciskb);
        frameKontrast.getContentPane().add(panel);
        frameKontrast.getContentPane().add(panel);
        frameKontrast.setVisible(true);
    }};
Main:
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
导入javax.swing.JButton;
导入javax.swing.JOptionPane;
导入javax.swing.JFrame;
公共类按钮{{
/*框架创建*/
最终JFrame frameKontrast=新JFrame();
frameKontrast.setTitle(“主菜单”);
frameKontrast.setSize(500350);
frameKontrast.setLocationRelativeTo(空);
frameKontrast.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*JPanel创建*/
JPanel面板=新的JPanel();
panel.setLayout(新的GridLayout(0,1));
/*奥克诺对话*/
最终JLabel对话框=新建JLabel();
dialog.setText(“Jestem bardzo długim Bezzensownym mam nawet kolejnąbardzo dąbezzown਷cz਷cz਷katóra istnieje tylko po to,由ow wiele,wiele dłuższy niżwszystkie inne oraz aby Abzmusićsiędo napisania skryptu robi加入我们的团队。”);
JMenuBar menuKontrast=新JMenuBar();
frameKontrast.setJMenuBar(menuKontrast);
/*普济西斯基·维博鲁*/
final JButton przyciskb=新JButton();
przyciskb.setText(“退出”);
最终JButton przyciska=新JButton();
setText(“开始游戏”);
/*罗兹维珍菜单(扎达尼亚)*/
JMenu目标=新JMenu(“目标”);
JMenuItem zad1=新的JMenuItem(“Zadanie编号1”);
JMenuItem zad2=新的JMenuItem(“Zadanie编号2”);
JMenuItem zad3=新的JMenuItem(“Zadanie编号3”);
/*杜切尼·奥比克托·杜圭*/
panel.add(对话框);
MenuContrast.add(目标);
目标.增加(zad1);
目标.增加(zad2);
目标.增加(zad3);
ButtonGroup=新建ButtonGroup();
添加组(przyciska);
添加组(przyciskb);
面板。添加(przyciska);
panel.add(przyciskb);
frameKontrast.getContentPane().add(面板);
frameKontrast.getContentPane().add(面板);
frameKontrast.setVisible(true);
}};
这是一个新窗口,我想通过przyciska按钮打开:

    public class frameKontrastGame {{
    {
        JFrame frameKontrastGame = new JFrame();
        frameKontrastGame.setTitle("Kontrast");
        frameKontrastGame.setSize(1000,700);
        frameKontrastGame.setLocationRelativeTo(null);
        frameKontrastGame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel ();                                                       
        panel.setLayout(new GridLayout(0, 1));



        JLabel dialog = new JLabel();                                                       
        dialog.setText("<html>Kontrast</html>");
        JMenuBar menuKontrast = new JMenuBar();
        frameKontrastGame.setJMenuBar(menuKontrast); 
        frameKontrastGame.setVisible(true);
        panel.add(dialog);
        frameKontrastGame.getContentPane().add(panel);
        frameKontrastGame.getContentPane().add(panel);
        frameKontrastGame.setVisible(true);
    }}}
公共类frameKontrastGame{{
{
JFrame frameKontrastGame=新JFrame();
frameKontrastGame.setTitle(“Kontrast”);
frameKontrastGame.setSize(1000700);
frameKontrastGame.setLocationRelativeTo(空);
frameKontrastGame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel面板=新的JPanel();
panel.setLayout(新的GridLayout(0,1));
JLabel dialog=新建JLabel();
dialog.setText(“Kontrast”);
JMenuBar menuKontrast=新JMenuBar();
frameKontrastGame.setJMenuBar(menuKontrast);
frameKontrastGame.setVisible(true);
panel.add(对话框);
frameKontrastGame.getContentPane().add(面板);
frameKontrastGame.getContentPane().add(面板);
frameKontrastGame.setVisible(true);
}}}
我知道这不是最好的代码。它起作用了,我很满意。我的问题是我不能使用“this”侦听器。我希望有人有一点时间来帮助我解决这个简单的问题。
感谢您阅读本文。

您可以通过键入将ActionListener添加到按钮中

przyciska.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ev) {
                new frameKontrastGame();                    
            }
});
(假设您在frameKontraestGame类中编写的代码在其构造函数中启动jframe)

如果您希望处理来自多个按钮的操作,那么您可以编写另一个类,例如ActionHandler(或您希望为该类指定的任何名称),该类将实现接口ActionListener。
然后,在actionPerformed函数中,您可以检测到通过使用ev.getSource()(ev是ActionEvent变量)方法预先设置的按钮。

您不应该使用
侦听器,即使可以,因为这是一种糟糕的编程实践(打开多个JFrame也是如此)。最好使用匿名内部类ActionListeners。请查找并试一试。请查看匿名内部类侦听器和操作的示例。先生,我可以使用该示例添加实现吗?示例pryzciska.addActionListener(this);然后覆盖