2012-05-04 34 views
8

Ưu và khuyết điểm của mở rộng JFrame thay vì tạo JFrame mới là gì?Mở rộng JFrame

Ví dụ:

public class Test extends JFrame { 

setVisible(true); 

} 

hoặc

public class Test { 

JFrame test = new JFrame(): 

test.setVisible(true); 

} 

Trả lời

9

Bạn không nên mở rộng một lớp, trừ khi bạn muốn thực sự mở rộng chức năng của nó, trong ví dụ bạn đã thể hiện, bạn nên sử dụng tùy chọn 2, như tùy chọn 1 là lạm dụng tính năng ing extend.

Nói cách khác - miễn là câu trả lời cho câu hỏi là Thử nghiệm một JFrame?NO, không được mở rộng JFrame.

+1

Amen và đồng ý 100% 1+ phiếu bầu. –

+0

Nếu tôi thêm một số phương thức vào lớp mở rộng, tôi có đang mở rộng JFrame không? Xin vui lòng, trả lời đó. Tại sao tùy chọn 1 là lạm dụng tính năng mở rộng? Anh ta không ghi đè một phương pháp gọi là setVisible. Điều đó có nghĩa là tôi không thể gọi các phương thức kế thừa? Tại sao không hoàn thành JFrame mở rộng nếu lo lắng về các lớp con tiềm năng? Tôi không nghĩ rằng nó là ** sai ** để mở rộng JFrame để tạo ra một cửa sổ, nếu nó LÀ Một cửa sổ. –

+0

Tôi đang cố gắng hiểu rõ hơn. Một ví dụ về trường học: Một sinh viên mở rộng một người. Học sinh có tùy chọn để đăng nhập, Người thì không. Một cửa sổ "NewTask" cung cấp một funcion để tạo ra một nhiệm vụ mới theo một hình thức, JFrame thì không. –

8

ưu của không mở rộng JFrame (hoặc bất kỳ thành phần Swing cho rằng vấn đề):

  • Tránh không chủ ý phương pháp ghi đè. Tôi đã bước vào điều này nhiều lần, lần đầu tiên khi tôi đã cho lớp học của tôi int getX()int getY() phương pháp. Hãy thử nó và bạn sẽ thấy một số hành vi bất thường không vui như vậy.
  • Đơn giản hóa các tùy chọn phương pháp có sẵn khi sử dụng Eclipse hoặc NetBeans chỉ với những phương pháp bạn đã tạo. Đây thực sự là lợi thế yêu thích của tôi.
  • Hướng giao diện GUI của bạn để tạo JPanels thay vì JFrames giúp tăng tính linh hoạt trong triển khai gấp 100 lần.
  • Và quan trọng nhất là chỉ hiển thị những thứ cần phơi bày.
+0

Tôi thích điểm 3, do đó +1 cho bạn. – Jasonw

+2

* "Định hướng GUI của bạn để tạo JPanels hơn là JFrames .." * Chắc chắn, nhưng hãy cẩn thận không rơi vào cùng một cái bẫy mở rộng bảng điều khiển (trừ khi thực hiện hành vi sơn tùy chỉnh, v.v.). –

+1

Đến nay, điểm 4 là quan trọng nhất trong quan điểm của tôi. +1 –

0

Một trong các quy tắc của OOD: Nếu bạn không thể kế thừa (mở rộng) các lớp bạn không kế thừa.

Thừa kế làm tăng độ phức tạp và kết nối của chương trình và có khả năng dẫn đến lỗi mới. Trong trường hợp của bạn không có bất kỳ lý do để mở rộng lớp học.

Bạn chỉ nên mở rộng lớp khi bạn cần truy cập vào các thành viên được bảo vệ và/hoặc hoặc có được hành vi đa hình (ghi đè các phương thức ảo).

+0

* ".. các lớp bạn không kế thừa." * Cái gì? Bạn đã cho tôi treo trên từ tiếp theo ..;) –

2

Nếu mở rộng JFrame, tôi muốn sửa đổi/tùy chỉnh lớp Jframe hiện tại của mình và vì vậy lớp con có thể sử dụng triển khai tùy chỉnh này.

Nếu không có gì mà tôi muốn thay đổi trong lớp JFrame, chỉ cần sử dụng số hiện tại như trong đoạn mã thứ hai mà bạn đã đưa ra trong mã của mình. Bằng cách sử dụng, tôi có nghĩa là bằng cách tạo JComponent khác (nút/nhãn cho ví dụ), vv, trong một JPanel và tạo một đối tượng Kiểm tra và đặt JFrame contentPane cho đối tượng này. Một cái gì đó như

public class Test extends JPanel { 

    public class() { 
    // add buttons/label here 
    } 
    ... 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame(); 

     Test object = new Test(); 
     frame.setContentPane(object.setOpaque(true)); 

     frame.setVisible(true); 
    } 
... 
}