2013-06-02 41 views
0

(我刚开始用java编程) 所以这里是我的代码!试图通过单击Jbutton来打开新的Jframe窗体另一个类

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

这里是我想通过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); 
    }}} 

我知道,它不是最好的代码。它正在工作,我对此感到满意。我的问题是我不能使用“这个”听众。我希望有人有一点时间来帮助我解决这个简单的问题。 感谢您阅读所有这些内容。

+0

即使您可以这样做,也不应该使用'this'听众,因为这是不好的编程习惯(正如打开多个JFrames一样)。最好使用匿名内部类ActionListeners。请看这个,并给它一个去。 –

+0

请查看[此链接](http://stackoverflow.com/a/16875770/522444)以获取匿名内部类侦听器和Actions的示例。 –

回答

2

您可以通过键入

przyciska.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent ev) { 
       new frameKontrastGame();      
      } 
}); 

一个ActionListener添加到按钮(假设你已经写在frameKontraestGame类的代码开始其构造函数内一个JFrame)

如果你想处理来自多个按钮的动作,然后你可以编写另一个类,例如。 ActionHandler(或者你想给类的任何名字)将实现Interface ActionListener。 然后在actionPerformed函数中,您可以检测到使用ev.getSource()(ev是您的ActionEvent变量)方法所得到的按钮。

+0

先生我可以使用它添加工具吗? – Batusai

+0

示例pryzciska.addActionListener(This);然后重写 – Batusai

相关问题