2012-05-04 29 views
8

tôi có một chương trình trong đó một JPanel được thêm vào một JFrame:JPanel Thêm vào JFrame

public class Test{ 

    Test2 test = new Test2(); 
    JFrame frame = new JFrame(); 

    Test(){ 

    ... 
    frame.setLayout(new BorderLayout()); 
    frame.add(test, BorderLayout.CENTER); 
    ... 

    } 

    //main 

    ... 

    } 

    public class Test2{ 

    JPanel test2 = new JPanel(); 

    Test2(){ 

    ... 

    } 

} 

tôi nhận được một lỗi yêu cầu tôi thay đổi loại của 'bảng' thành 'thành phần'. Tôi có khắc phục được lỗi này không? Nó muốn tôi làm: Component panel = new Component();

+0

Bạn cần phải gửi mã hơn vì những gì bạn được đăng chỉ nên làm việc – Robin

+0

JPanel là một thành phần. Mã bạn vừa dán có cho bạn lỗi đó không? – Charles

+0

Có vẻ như bạn đang hiểu sai thông báo lỗi; thông báo lỗi * chính xác * là gì? – rob

Trả lời

14
public class Test{ 

Test2 test = new Test2(); 
JFrame frame = new JFrame(); 

Test(){ 
... 
frame.setLayout(new BorderLayout()); 
frame.add(test, BorderLayout.CENTER); 
... 
} 

//main 
... 
} 

//public class Test2{ 
public class Test2 extends JPanel { 

//JPanel test2 = new JPanel(); 

Test2(){ 
... 
} 
+1

Bởi sự tò mò, có lý do nào bạn không mở rộng 'JFrame' trực tiếp trong' Test'? Tôi luôn làm điều này, có lẽ đó là một thói quen xấu? Được thăng hạng. –

+2

@ Jean-FrançoisSavard Tôi không thêm bất kỳ chức năng nào hoặc thay đổi bất kỳ chức năng hiện có nào của khung hình, vì vậy tôi chỉ sử dụng một phiên bản thuần túy. Nó thường là nhà xây dựng GUI khuyến khích mở rộng khung hoặc bảng (không có lý do chính đáng mà tôi có thể nhìn thấy). –

+0

Điều đó có ý nghĩa, Cảm ơn vì câu trả lời nhanh. –

0
Test2 test = new Test2(); 
... 
frame.add(test, BorderLayout.CENTER); 

Bạn có chắc chắn điều này không? test KHÔNG phải là một thành phần! Để làm những gì bạn đang cố gắng làm, bạn nên để Test2 mở rộng JPanel!

0

Lớp học Test2 của bạn không phải là Component, nó có một số Component là sự khác biệt.

Hoặc bạn làm điều gì đó như

frame.add(test.getPanel()); 

sau khi bạn giới thiệu một getter cho bảng trong lớp học của bạn, hoặc bạn có chắc chắn rằng lớp Test2 của bạn sẽ trở thành một Component (ví dụ như bằng cách mở rộng một JPanel)

1

Thay vì có lớp Test2 của bạn chứa JPanel, bạn nên có lớp con JPanel:

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

Thông tin chi tiết:

JPanel là một lớp con của Hợp phần, vì vậy bất kỳ phương pháp mà phải mất một phần như một cuộc tranh cãi cũng có thể tham gia một JPanel là một cuộc tranh cãi.

Phiên bản cũ hơn không cho phép bạn thêm trực tiếp vào JFrame; bạn phải sử dụng JFrame.getContentPane(). add (Component). Nếu bạn đang sử dụng phiên bản cũ hơn, điều này cũng có thể là một vấn đề. Các phiên bản Java mới hơn cho phép bạn gọi trực tiếp JFrame.add (Component).

2

làm điều đó chỉ đơn giản là

public class Test{ 
    public Test(){ 
     design(); 
    }//end Test() 

public void design(){ 
    JFame f = new JFrame(); 
    f.setSize(int w, int h); 
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    f.setVisible(true); 
    JPanel p = new JPanel(); 
    f.getContentPane().add(p); 
} 

public static void main(String[] args){ 
    EventQueue.invokeLater(new Runnable(){ 
    public void run(){ 
     try{ 
      new Test(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

} 
     ); 
} 

} 
+0

điều này sẽ giúp ích. nó hoạt động như một sự quyến rũ đối với tôi – sabbibJAVA

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