2012-06-08 37 views
1

我遇到的問題是,當更多的行被添加到JTable(jtbls)時,垂直滾動條不會出現在我的JScrollPane(外部)上。如何使JScrollPane與嵌套的JTable一起正常工作?

JPanel panel = new JPanel(); 
panel.setLayout(new GridLayout(1, 4)); 
JScrollPane outer = new JScrollPane(panel); 

jtbls = new JTable[4]; 
for (int i = 0; i < jtbls.length; i++) { 
    jtbls[i] = new JTable(new MyTableModel()); 
    jtbls[i].setFillsViewportHeight(true); 
    jtbls[i].setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); 

    JPanel inner = new JPanel(new BorderLayout()); 
    inner.add(jtbls[i], BorderLayout.CENTER); 
    inner.add(jtbls[i].getTableHeader(), BorderLayout.NORTH); 
    inner.setPreferredSize(new Dimension(outer.getWidth()/4, 70)); 

    panel.add(inner); 
} 

add(outer); 

Screenshot

回答

1

這是因爲你設置

inner.setPreferredSize(new Dimension(outer.getWidth()/4, 70)); 

所以innerJPanel是 「精」 與高度之上70並沒有要求更多的空間給父 - JPanel panel贏得」 t向其父母請求更多空間 - JVieport

此外,如果你看看JTable的源代碼 - 方法setFillsViewportHeight只適用於javax.swing.JLayerjavax.swing.ScrollPaneLayoutjavax.swing.ViewportLayout(看看getScrollableTracksViewportHeight()調用) - 所以這將工作,只有當JTable的是一些視口內部。

2

您可以將除滾動條之外的所有滾動條都設置爲VERTICAL_SCROLLBAR_NEVER,並將其中一個設置爲VERTICAL_SCROLLBAR_ALWAYS。然後將滾動條模型綁在一起,就像@camickr向我展示了here

相關問題