簡體   English   中英

擴展JFrame

[英]Extending a JFrame

擴展JFrame而不是創建新的JFrame有什么優缺點?

例如:

public class Test extends JFrame {

setVisible(true);

}

要么

public class Test {

JFrame test = new JFrame():

test.setVisible(true);

}

您不應該擴展類,除非您想要實際擴展其功能,在您顯示的示例中,您應該使用選項2,因為選項1是濫用extend功能。

換句話說 - 只要問題的答案是Test a JFrame NO ,它不應該擴展JFrame

沒有擴展JFrame(或任何Swing組件)的優點:

  • 避免無意的方法覆蓋。 我已經多次介入過這個問題,首先是我給了我的類int getX()int getY()方法。 嘗試一下,你會看到一些不那么有趣的異常行為。
  • 將Eclipse或NetBeans僅用於您創建的方法時,簡化可用的方法選項。 這實際上是我最喜歡的優勢。
  • 使用GUI來創建JPanel而不是JFrame,從而將部署靈活性提高了100倍。
  • 最重要的是,只暴露需要暴露的東西。

如果擴展JFrame,我想修改/自定義我當前的Jframe類,因此子類可以使用這個自定義的實現。

如果在JFrame類中沒有任何我想要做的更改,只需使用您在代碼中給出的第二個片段中的現有內容。 通過使用,我的意思是在JPanel中創建其他JComponent(示例的按鈕/標簽)等,並創建一個對象Test並將JFrame contentPane設置為此對象。 就像是

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);
   }
...
}

OOD的一個規則:如果你不能繼承(擴展)你不繼承它們的類。

繼承增加了程序的復雜性和連通性,並可能導致新的錯誤。 在您的情況下,沒有任何理由擴展課程。

只有在需要訪問受保護成員和/或獲取多態行為(覆蓋虛方法)時,才應擴展類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM