BoxLayout中的Jtable

时间:2013-10-31 10:43:30

标签: java swing jtable layout-manager boxlayout

我有一个BoxLayout(在BorderLayout的面板中),我在其中垂直放置了一个JTable和一个按钮。我希望桌子有一个固定的宽度,并且高度应该自己调整到填充面板。目前,我对显示的宽度很好,但并不是说它填满了整个面板的高度。例如,如果表中的数据为零,我希望只显示列名。我尝试过像setViewportView()和setPreferredSize()这样的东西,但是不能真正使它工作。有什么建议?它是在布局还是滚动窗格中?

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);

EDIT 这就是最终的工作:

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

1 个答案:

答案 0 :(得分:1)

  

我希望桌子有一个固定的宽度和高度   应该调整自己以填补小组。

  

我有一个BoxLayout(在BorderLayout的一个面板中)我放了一个   JTable和一个垂直按钮。

有三种(仅提到简单的)方式

  • LayoutManager使用built_in JPanel - FlowLayoutFLowLayout.CENTER),

    1. 在你想要的情况下覆盖FLowLayout.LEFTRIGHT

    2. {li>

      JComponent FlowLayout永远无法通过编程方式更改XxxSize并通过revalidate& repaint

    3. 通过覆盖JTable.setPreferredScrollableViewportSize(new Dimension(int, int));

    4. 为JScrollPane设置适当的大小
    5. JFrame.pack(

    6. 之前,JScrollPane接受此维度作为初始尺寸,必须使用JFrame.setVisible(true)
  • BoxLayout接受min, max and preferred size,覆盖JScrollPane的所有这三种尺寸

  • half solution, but most comfortable)将LayoutManager的{​​{1}}更改为JPanel

    1. BorderLayoutJScrollPane区域放在JTable区域,

    2. 然后覆盖BorderLayout.EAST/WEST

    3. JTable.setPreferredScrollableViewportSize(new Dimension(int, int));将占据JScrollPane的整个区域,并且只能在BorderLayout.EAST/WEST坐标

    4. 上调整大小

  • 使用heights,以下是关于MigLayoutMigLayout的一些帖子(JScrollPaneJTextArea