2013-10-31 36 views
3

我有一個BoxLayout(在一個BorderLayout的面板中),我在其中放置了一個JTable和一個按鈕。我希望桌子有一個固定的寬度,並且高度應該調整自己以填充面板。目前,我對顯示的寬度沒有問題,但沒有填滿整個面板的高度。例如,如果表中有零個數據,我只想顯示列名。我嘗試過像setViewportView()和setPreferredSize()這樣的東西,但不能真正使它工作。有什麼建議麼?它在佈局還是滾動窗格中?Jtable in BoxLayout

String[] columnNames = { "Date", "Type" 
    }; 
Object[][] data = { 
    }; 
JTable myTable = new JTable(data, columnNames); 
JButton okButton = new JButton("OK"); 

JPanel panWest = new JPanel(); 
panWest.setLayout(new BoxLayout(panWest, BoxLayout.PAGE_AXIS)); 
JScrollPane scrollPane = new JScrollPane(myTable); 
panWest.add(scrollPane); 
panWest.add(okButton); 

編輯 這是結束了工作:

Dimension dimension = new Dimension(); 
dimension.height =  (myTable.getRowCount()*myTable.getRowHeight())+ 
myTable.getTableHeader().getPreferredSize().height; 
dimension.width = myTable.getColumnModel().getTotalColumnWidth(); 
scrollPane.setMaximumSize(dimension); 
+1

對於b etter幫助更快,發佈[SSCCE](http://sscce.org/)。 –

回答

1

我想表有一個固定的寬度和高度 應該調整自己達到填充面板。

我有一個的BoxLayout(在BorderLayout的的面板),其中我已經把一個 的JTable和按鈕垂直。

有三個(只提到了簡單)的方式

  • 使用BUILT_IN LayoutManagerJPanel - FlowLayoutFLowLayout.CENTER),

    1. 覆蓋FLowLayout.LEFT或者在您需要的情況下RIGHT

    2. JComponent通過FlowLayout奠定永遠不會改變大小,而不編程改變XxxSizerevalidate & repaint通知,

    3. 通過覆蓋JTable.setPreferredScrollableViewportSize(new Dimension(int, int));設置適當的大小JScrollPane中,

    4. JScrollPane的接受這個尺寸作爲初始大小,需要JFrame.pack(),之前JFrame.setVisible(true)

  • BoxLayout接受min, max and preferred size,覆蓋所有這三個尺寸JScrollPane

  • half solution, but most comfortable)變化LayoutManagerJPanelBorderLayout

    1. JScrollPaneJTableBorderLayout.EAST/WEST區,

    2. 然後覆蓋JTable.setPreferredScrollableViewportSize(new Dimension(int, int));

    3. JScrollPane將佔據整個區域BorderLayout.EAST/WEST並會調整大小隻有heights座標


  • 使用MigLayout,這裏有幾個崗位約MigLayoutJScrollPane(與JTextAreaJTable
+0

感謝您的幫助!它使我感到使用最小/首選尺寸+最大尺寸,但事實證明,我只需要設置最大尺寸。 – mistysch

+0

不客氣 – mKorbel