2013-06-02 3 views
0

(Я только начал программировать в java.) Итак, вот мой код!Попытка открыть новый Jframe из другого класса, нажав кнопку Jbutton

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). –

ответ

2

Вы можете добавить ActionListener к кнопке, набрав

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

(при условии, что код, который вы написали в классе frameKontraestGame начинает JFrame в его конструкторе)

В случае, если вы хотите обрабатывать действия из более чем 1 кнопки, тогда вы можете написать другой класс, например. ActionHandler (или любое другое имя, которое вы хотите дать классу), который будет реализовывать интерфейс ActionListener. Затем в функции actionPerformed вы можете обнаружить кнопку, которая была предварительно сохранена, используя метод ev.getSource() (ev - ваш ActionEvent).

+0

сэр я могу добавить инструменты, используя это? – Batusai

+0

пример pryzciska.addActionListener (This); затем переопределить – Batusai

Смежные вопросы