2011-10-20 41 views
2

我一直試圖在我在Netbeans中製作的GUI應用程序中實現圖形。我使用GUI編輯器完成了佈局(按鈕,文本框等),到目前爲止它一切正常。基本上我想要做的是在我的JFrame的下半部分生成一些圖形(線條等),並在JFrame的上半部分留下複選框,按鈕等。在JPanel中實現圖形

從我見過的例子中,一般的方法是創建一個擴展JPanel幷包含圖形代碼來創建線條和其他各種形狀的類。我已經能夠獨立於GUI編輯器實現這個功能,但是應用程序僅由佔用整個JFrame的JPanel組成。我在GUI編輯器中使用過的不同方法可以生成圖形,但會阻止我的JFrame中的所有內容(即使是一條小線),或者根本沒有做任何事情。

理想情況下,我希望能夠在我的JFrame上的任意位置放置任意大小的JPanel,並創建面板中包含的圖形。我還想要創建的圖形的座標參考JPanel而不是JFrame(因此座標0,0是我的JPanel的左上角,而不管我決定放置它的位置)。

Is有一個簡單的方法來做到這一點?

(示例代碼將不勝感激)

回答

3

首先,你必須提供一個擴展的JPanel類,然後覆蓋paintComponent方法來提供圖形的風俗畫。

然後在JFrame上,您需要使用適當的佈局管理器在JFrame上放置多個組件。舉例來說,您可以使用GridLayout將Jframe分成兩半。頂部的一個可以包含一個普通的JPanel和你的按鈕和控件,下面的JPanel將是你自定義的JPanel和自定義圖形。

您在paintComponent中使用的座標將僅引用底部的JPanel。

當然,如果您需要更具體的佈局選項,您可以使用比GridLayout更高級的佈局管理器。

  • 這也可以在NetBeans IDE中通過右鍵單擊組件並在自動調整大小選項中選擇「垂直」和/或「水平」來完成。
+0

外觀極好sugestion +1 – mKorbel

+0

有沒有辦法做到這一點使用NetBeans/Swing GUI的編輯器?我的應用程序在單獨的框架中顯示圖形時工作得很好。理想情況下,我希望在整個開發過程中使用GUI編輯器調整我的JPanel的大小和位置,而不是硬編碼它。 – Ben

+0

@Ben。是的,有一種方法。看到這個問題的答案:http://stackoverflow.com/questions/816286/how-to-include-custom-panel-with-netbeans-gui-builder。您可以將您的自定義JPanel添加到Pallette,然後將其拖動到佈局管理器。 –

-1

那麼你可以去老同學,簡單高效:

  1. 設置爲空

    contentPane.setLayout(空)佈局管理器;

  2. 落實公共無效的doLayout()方法,在你的類

例如

public void doLayout() { 
     Dimension size  = getSize() ; 
     int  x   = wizardImage.getImage().getWidth(this)+10 ; 
     int  y   = 5 ; 
     int  rowHeight = 18; 
     super.doLayout() ; 
     st_IMAGE.setBounds (5,((size.height-40)/2)-(wizardImage.getImage().getHeight(this)/2), wizardImage.getImage().getWidth(this), wizardImage.getImage().getHeight(this)) ; 
     st_EXPORTTYPE.setBounds (x, y, size.width-(x)-10, rowHeight) ; 
     y+=rowHeight ; 
     rb_TAB_DELIM.setBounds (x, y, size.width-(x)-10-100, rowHeight) ; 
     y+=rowHeight ; 
     rb_COMMA_SEPARATED.setBounds (x, y, size.width-(x)-10-100, rowHeight) ; 
     y+=rowHeight ; 
     rb_FLAT_TEXT.setBounds (x, y, size.width-(x)-10-100, rowHeight) ; 
     y+=rowHeight+10 ; 
     pb_EXPORT.setLocation (x, size.height-75) ; 
     pb_CANCEL.setLocation (x+pb_EXPORT.getMinimumSize().width+5, size.height-75) ; 

    } 
+1

有人仍然住在AWT邊緣:-),1)不這樣做,2)不要這樣做,3)不要這樣做,不要這樣做:-)沒有別的可能......你的帖子不是反對票 – mKorbel