2013-06-02 39 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

相關問題