2011-05-24 55 views
21

我把JTable放入JScrollPane如何使JTable都AutoResize和horizo​​ntall滾動?

但是當我設置JTable Auto Resizeable時,它不會有水平滾動條。

如果我設置了AUTO_RESIZE_OFF,那麼當列寬度不夠大時,Jtable將不會填充其容器的寬度。

所以,我怎麼可以這樣做:

  1. 當桌子不夠寬,擴大,以填補其容器寬度
  2. 當桌子足夠寬,使其滾動。

感謝

回答

33

您需要自定義Scrollable接口的行爲。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableHorizontal extends JFrame 
{ 
    public TableHorizontal() 
    { 
     final JTable table = new JTable(10, 5) 
     { 
      public boolean getScrollableTracksViewportWidth() 
      { 
       return getPreferredSize().width < getParent().getWidth(); 
      } 
     }; 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     final JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 
    } 

    public static void main(String[] args) 
    { 
     TableHorizontal frame = new TableHorizontal(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setSize(400, 300); 
     frame.setVisible(true); 
    } 
} 

上面的代碼基本上按照其首選大小或視口大小來確定組件大小,以較大者爲準。

+1

卓越知識+1,適合setSize -1 – mKorbel 2011-05-24 06:41:51

+0

優秀!這正是我想要的。 – Leon 2011-05-24 13:07:21

+0

感謝您的解決方案。有用。 ! – 2011-08-11 14:36:50

0

如果您有BorderLayout.CENTER佈局約束設置其容器的佈局BorderLayout,則JTable中會自動調整以適應其容器。

如果要製作可滾動組件,可以使用JScrollPane包裝JTable。

setLayout(new BorderLayout()); 
add(new JScrollPane(new JTable()), BorderLayout.CENTER); 
+0

這隻能自動調整寬度而不是高度。我怎樣才能讓它自動調整高度? – bbodenmiller 2012-12-05 08:42:13

7

如果由於某種原因自定義JTable不是一個選項(例如,它可能是在第三方代碼中創建的),您可以通過將其設置爲在兩個不同的JTable AUTO_RESIZE模式之間切換來實現相同的結果,只要包含的視口被調整大小例如:

jTable.getParent().addComponentListener(new ComponentAdapter() { 
    @Override 
    public void componentResized(final ComponentEvent e) { 
     if (jTable.getPreferredSize().width < jTable.getParent().getWidth()) { 
      jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
     } else { 
      jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     } 
    } 
}); 
+0

工作就像一個魅力!感謝您的簡單解決方案。 – Vova 2015-10-24 10:46:30

1

我發現,所有需要的是,以包括

table = new JTable(model); 
    // this enables horizontal scroll bar 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  

,然後當所需的視口寬度和高度已被計算,包括

frame.getContentPane().add(new JScrollPane(table)) 
    table.setPreferredScrollableViewportSize(new Dimension(width,height)); 
相關問題