我把JTable放入JScrollPane如何使JTable都AutoResize和horizontall滾動?
但是當我設置JTable Auto Resizeable時,它不會有水平滾動條。
如果我設置了AUTO_RESIZE_OFF,那麼當列寬度不夠大時,Jtable將不會填充其容器的寬度。
所以,我怎麼可以這樣做:
- 當桌子不夠寬,擴大,以填補其容器寬度
- 當桌子足夠寬,使其滾動。
感謝
我把JTable放入JScrollPane如何使JTable都AutoResize和horizontall滾動?
但是當我設置JTable Auto Resizeable時,它不會有水平滾動條。
如果我設置了AUTO_RESIZE_OFF,那麼當列寬度不夠大時,Jtable將不會填充其容器的寬度。
所以,我怎麼可以這樣做:
感謝
您需要自定義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);
}
}
上面的代碼基本上按照其首選大小或視口大小來確定組件大小,以較大者爲準。
如果您有BorderLayout.CENTER佈局約束設置其容器的佈局BorderLayout,則JTable中會自動調整以適應其容器。
如果要製作可滾動組件,可以使用JScrollPane包裝JTable。
setLayout(new BorderLayout());
add(new JScrollPane(new JTable()), BorderLayout.CENTER);
這隻能自動調整寬度而不是高度。我怎樣才能讓它自動調整高度? – bbodenmiller 2012-12-05 08:42:13
如果由於某種原因自定義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);
}
}
});
工作就像一個魅力!感謝您的簡單解決方案。 – Vova 2015-10-24 10:46:30
我發現,所有需要的是,以包括
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));
卓越知識+1,適合setSize -1 – mKorbel 2011-05-24 06:41:51
優秀!這正是我想要的。 – Leon 2011-05-24 13:07:21
感謝您的解決方案。有用。 ! – 2011-08-11 14:36:50