2012-01-07 69 views
6

Tôi cần chương trình - JFrame chính có 2 nútlàm thế nào để tạo ra một cửa sổ với hai nút đó sẽ mở ra một cửa sổ mới

  1. nút
  2. button2

Khi tôi bấm nút nó phải mở cửa sổ JFrame mới với các tùy chọn mới, trong khi nếu tôi nhấp vào button2 thì mở một cửa sổ khác.

Trong 2 cửa sổ mới này, tôi phải thêm các nút như tiếp theo và trước đó.

Tôi gặp sự cố khi mở nút 1, sau đó mở 2 cửa sổ và JFrame chính vẫn hiển thị.

chương trình đầu tiên của tôi trên đu:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class example { 

public static void main (String[] args){  
    JFrame frame = new JFrame("Test"); 
    frame.setVisible(true); 
    frame.setSize(500,200); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel = new JPanel(); 
    frame.add(panel); 
    JButton button = new JButton("hello agin1"); 
    panel.add(button); 
    button.addActionListener (new Action1()); 

    JButton button2 = new JButton("hello agin2"); 
    panel.add(button2); 
    button.addActionListener (new Action2()); 
} 
static class Action1 implements ActionListener {   
    public void actionPerformed (ActionEvent e) {  
    JFrame frame2 = new JFrame("Clicked"); 
    frame2.setVisible(true); 
    frame2.setSize(200,200); 
    JLabel label = new JLabel("you clicked me"); 
    JPanel panel = new JPanel(); 
    frame2.add(panel); 
    panel.add(label);  
    } 
} 
static class Action2 implements ActionListener {   
    public void actionPerformed (ActionEvent e) {  
    JFrame frame3 = new JFrame("OKNO 3"); 
    frame3.setVisible(true); 
    frame3.setSize(200,200); 

    JLabel label = new JLabel("kliknales"); 
    JPanel panel = new JPanel(); 
    frame3.add(panel); 
    panel.add(label); 
    } 
} 
} 
+4

* "tôi không tại như thế nào nhưng tôi rly cần nó," * Cả hai chính tả cờ và phím di chuyển dồi dào. –

Trả lời

6

Bạn thêm bạn ActionListener hai lần để button. Vì vậy, sửa mã của bạn cho button2 để

JButton button2 = new JButton("hello agin2"); 
    panel.add(button2); 
    button2.addActionListener (new Action2());//note the button2 here instead of button 

Bên cạnh đó, thực hiện các thao Swing của bạn trên correct thread bằng cách sử dụng EventQueue.invokeLater

+0

tôi thử nhưng tôi không thể làm điều này; /. vui lòng sửa mã của tôi – Lukii007

+3

Mã tôi đã đăng được sao chép từ máy của bạn và tôi chỉ thêm một '2'. Bạn sẽ có thể tự mình làm điều đó. Và cuộc gọi 'invokeLater' có thể được sao chép gần như trực tiếp từ liên kết mà tôi đã cung cấp – Robin

+0

Tôi đồng ý với @Robin ngay sau khi bạn khai báo button2 trên dòng thứ hai là button.add ... thay vì nút ** 2 **. – Adnan

Các vấn đề liên quan