Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Thao tác giữa JFrame,JPanel,JPanel - Java Swing

2299 Lượt xem 8 Bình luận 0 Lượt báo xấu
Mình đang gặp vấn đề nan giải cần sự giúp đỡ của mọi người
Đó là : cách gọi JPanel 2 từ JPanel 1
JPanel 1 là nơi để login khi login thành công thì sẽ chuyển vào JPanel 2 còn ngược lại vẫn ở JPanel 1.
Mình đã xử lý được JFrame gọi JPanel 1 rùi nhưng từ JPanel 1 này để gọi JPanel 2 thì không được
Các bạn giúp mình với . Chân thành cám ơn!
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Bạn nói k đủ ý nên mình k thể hiểu được .

Mình chỉ có thể hiểu như thế này thôi :

JFrame chứa Jpanel1 và JPanel2
Ban đầu JPanel1 hiển thị , nếu login thành công thì hiển thị JPanel2 ,ẩn JPanel1

Nếu vậy thì đâu cần phải gọi JPanel2 từ Jpanel1 , bạn vẫn có thể gọi từ JFrame mà ... bạn có thể nói rõ thêm 1 chút về thắc mắc của bạn nha ^^ , càng rõ ràng càng tốt

Nói thêm :
Khi thao tác với các JPanel , nếu 2 panel là 2 đối tượng song song lúc runtime ( tức là lúc compile , 2 panel này hoàn toàn k biết nhau , tức là có 1 panel xuất hiện lúc runtime hoặc cả 2 panel đều xuất hiện lúc runtime , và trong lúc đó , bạn muốn từ 1 panel này g ọi panel kia , thì bạn có thể dùng reflection để gọi , nhưng cũng vẫn gọi trên container cha ) ...

Chúc bạn học tốt
Thân!
0 Lượt thích

Gọi như thế nào mà không được, sao không post code lên, không chạy cũng post lên chứ, thực hành mà ngại gì thế.
0 Lượt thích

ok ...để mình nói rõ vấn đề hơn thế này nhé :

Khi runtime thì mình sẽ run thì JFrame và Jframe này sẽ gọi JPanel 1, cái này để mình login, nếu login chuẩn sẽ vào JPanel 2 và ngược lại vẫn giữ nguyên hiện trường để login lại.

Bạn có thể cho mình code demo luôn nhé. Chân thành cám ơn!

Và đây là code :

public class MainFrame extends javax.swing.JFrame {
   
    public MainFrame{
        initComponents();
          JPanel1 nel=new JPanel1();
          nel.setVisible(true);
          nel.setSize(400, 300);
          nel.setLayout(new BorderLayout());
          this.add(nel);
     }
public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
               
                    new MainFrame().setVisible(true);
               

            }
        });
    }

public class JPanel1 extends javax.swing.JPanel {

       public JPanel1() {
        initComponents();
    }
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
       
            MainFrame mf = new MainFrame();
            mf.setVisible(true);
          
            JPanel2 nel2 = new JPanel2();
            nel2.setSize(686, 536);
            nel2.setLayout(new BorderLayout());

            mf.add(nel2);
           
                  
    }
}

Các bạn tư vấn giúp nhé!


0 Lượt thích

Thế này nhé ... code event của bạn làm thế k đc đâu

Đầu tiên , nếu login success thì bạn phải remove Jpanel1 ra khỏi JFrame , rồi add JPanel2 vào JFrame , thế là xong , k cần phải tạo ra nhiều đối tượng làm gì ^^ , vả lại code của bạn có nhiều lỗi lắm

Để giải quyết vấn đề của bạn thì bạn có thể làm như thế này :

Tại code event , đầu tiên bạn phải check login . check OK thì :

JFrame parent = (JFrame) this.getParent();
parent.remove(this);
parent.add(panel2) // bạn phải khai báo 1 panel2 ở trên trước đã nha

parent.repaint();
parent.revalidate();

Chúc bạn học tốt ^^
Thân!
0 Lượt thích

Mình đã thêm code tại event button tại JPanel2 như bạn nói

//Code tại JPanel 2
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JPanel2 nel = new JPanel2();
 MainFrame mf=(MainFrame) this.getParent();
            mf.remove(this);
            mf.add(nel);
            mf.repaint();
            mf.revalidate(); //ko có method này bạn ui

Khi run thì xuất hiện lỗi này : Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JPanel cannot be cast to MainForm.MainForm

Bây giờ phải làm sao đây bạn ui!!!


0 Lượt thích

(MainFrame) this.getParent();

this.getParent(); lấy được thằng nào vậy, ép kiểu nó về MainFrame nó không cho, vậy đói.

Code mới của bạn các lớp sắp xếp thế nào, container dùng như thế nào? Phải có code mới nói chuyện được chứ.
0 Lượt thích

Toàn bộ source code của bài mình đã post lên rùi đó bạn, cái sau này mình đã làm theo hướng dẫn của bạn MeoCon là thêm đoạn code như bạn ấy nói vào event button tại JPanel2 nhưng khi chạy đã xảy ra lỗi trên.

Bạn JackV có demo code cho mình ngâm cứu với nào?Chân thành cám ơn!
0 Lượt thích

Giờ tớ nói cậu một cách đơn giản thế này nhé, đây là một mẹo.

Cậu add panelCenter vào jframe rồi cả 2 panelLogin và panelWelcome cùng vào giữa panelCenter luôn, khi mới chạy lên cậu set cho cái panelWelcome ẩn đi, khi login thành công thì set cái panelLogin ẩn đi, cái panelWelcome hiện lại, đơn giản nhất. panelCenter set layout là grid 1cot 1dong. Mỗi lần set ẩn hiện thì gọi panelCenter.updateUI().

Làm mới có kinh nghiệm đau thương chứ. Cách của MeoCon hướng dẫn bạn khác vì bạn muốn là login thành công mới tạo cái panel welcome, sao không tạo ngay từ đầu, cần cái nào cho cái đó hiện lên.
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng