2013-05-12 123 views
2

我有一個關於將組件添加到Java框架的問題。將JScrollPane添加到JFrame中

我有一個JPanel有兩個按鈕,還有一個JScrollPane,它有一個JTable添加到它。我想將這兩個添加到JFrame。

我可以將JPanel添加到JFrame或將JScrollPane添加到JFrame,並且它們可以正確顯示。我無法將它們都添加到JFrame並顯示它們。

有沒有與JFrames有關的東西不允許這樣做?任何幫助將不勝感激。

編輯

的問題是不是與佈局(至少我不認爲它是),問題是,滾動窗格中顯示不正確。下面是說明我的意思的圖像:

http://canning.co.nz/Java/ScrollPane.png

下面是代碼:

GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridwidth = GridBagConstraints.REMAINDER; 
    guiPanel.add(scrollPane, gbc); 
    guiPanel.add(buttons, gbc);   

    guiFrame.add(guiPanel, BorderLayout.CENTER); 
    guiFrame.setVisible(true); 
+1

1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用它們。 3)不要設置頂級容器的大小。而是佈置內容並調用'pack()'。 4)對於幀定位,你不能通過'setLocationByPlatform(true)'去。查看[這個答案](http://stackoverflow.com/a/7143398/418556)進行演示。 .. – 2013-05-12 07:48:37

+1

.. 5)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) – 2013-05-12 07:51:59

回答

2

默認情況下,JFrame中具有的borderlayout。 BorderLayout有五個標誌。當你不指定任何標誌時,它會用中心標誌將你的組件添加到幀中。如果組件中沒有指定其他標誌,則中心標誌將所有空間賦予添加了中心標誌的組件。關於邊界佈局以下鏈接瞭解更多信息,請訪問: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

您可以通過下面的語句添加兩個:

JFrame frame = new JFrame(); 

frame.add(new JPanel(), BorderLayout.NORTH); 

frame.add(new JScrollpane(), BorderLayout.CENTER); 
1

GridBagLayout中不利於這種情況。用較少的代碼你可以得到想要的代碼。

JPanel pnlButton = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
pnlButton.add(button1); 
pnlButton.add(button2); 

JFrame frame = new JFrame(); 
frame.add(scrollPane, BorderLayout.CENTER); 
frame.add(pnlButton, BorderLayout.PAGE_END); 

如果您只想使用Gridbaglayout。然後,你將需要設置的weightx,沉重,gridwidth和其他性能類似

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.gridwidth = GridBagConstraints.REMAINDER; 
gbc.weightx=1.0; 
gbc.weighy=1.0; 
gbc.fill = GridBagConstraints.BOTH; 
guiPanel.add(scrollPane, gbc); 
gbc.gridwidth = 1; 
gbc.fill = GridBagConstraints.NONE 
guiPanel.add(buttons, gbc);   
guiFrame.add(guiPanel, BorderLayout.CENTER); 
guiFrame.setVisible(true); 

請嘗試,讓我知道,如果它不工作,我會送完整的代碼使用GridBagLayout的。