2011-05-11 32 views
5

我使用JScrollPane來顯示JTable。我希望表中的列具有最小尺寸,以便在縮小屏幕時出現水平滾動;但我也希望他們能夠在屏幕變寬時進行擴展。使用當前的代碼,列不會傳遞最小值,只是視口停止顯示整個表格,並且不會激活水平滾動條。有沒有一種方法來設置滾動條應該出現在哪個寬度?JScrollPane上的水平欄

下面是一些代碼,我有:

private void addTable(JTable table){ 
    initColumnSizes(table); 

    JPanel tablePanel = new JPanel(new BorderLayout()); 
    JScrollPane scrolled = new JScrollPane(table); 
    scrolled.getViewport().setMinimumSize(tableSize); 
    scrolled.setMinimumSize(tableSize); 
    scrolled.setPreferredSize(tableSize); 
    scrolled.setBorder(border); 

    tablePanel.add(scrolled, BorderLayout.CENTER); 
    //more stuff 
} 

下面是initColumns方法的代碼,如果你需要它

private void initColumnSizes(JTable table) { 
    TableModel model = table.getModel(); 
    TableColumn column = null; 
    Component comp = null; 
    int headerWidth = 0; 
    int cellWidth = 0; 
    TableCellRenderer headerRenderer = 
     table.getTableHeader().getDefaultRenderer(); 

    for (int i = 0; i > table.getColumnCount(); i++) { 
     column = table.getColumnModel().getColumn(i); 
     comp = headerRenderer.getTableCellRendererComponent(
       table, column.getHeaderValue(), 
       false, false, 0, 0); 
     headerWidth = comp.getPreferredSize().width; 

     comp = table.getDefaultRenderer(model.getColumnClass(i)). 
     getTableCellRendererComponent(
       table, model.getValueAt(0, i), 
       false, false, 0, i); 
     cellWidth = comp.getPreferredSize().width; 


     column.setPreferredWidth(Math.max(headerWidth, cellWidth)); 
     column.setMinWidth(column.getPreferredWidth()); 
    } 
} 
+1

爲了儘快得到更好的幫助,請發佈[SSCCE](http://pscode.org/sscce.html)。 – 2011-05-11 18:40:42

回答

4

我懷疑表佈局算法只是在沒有足夠空間容納所有列時違反最後一列的最小大小限制,並且沒有根據最小列強制自己的最小寬度寬度。

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);將導致水平滾動條出現,但是當它變大時表格不會調整大小。但也許你可以使用ComponentListener來打開和關閉自動調整大小模式,具體取決於表格的寬度。

+0

這工作,謝謝。 – Sednus 2011-05-13 19:21:45

1

SwingX」 JXTable有一個額外的調整模式可能做你想做的,但鉤住列prefSize:

  • 如果prefSizes的總和< viewport.width,列大小以填充視口
  • 如果prefSizes> viewport.width的總和,水平滾動條是表示

的屬性來控制所述模式是horizo​​ntalScrollBarEnabled,它由缺省

是關10