编辑:很抱歉有很多修改。我忘记了自己写的东西。
我使用具有BoxLayout的JPanel作为JFrame的根面板。我正在向这个根面板添加另外两个面板:带有FlowLayou和tabbedPane的buttonPanel。每个选项卡式窗格都是通过按顶部的第二个按钮动态创建的。在tabbedPane中有一个带有BoxLayout的templatePanel,其中包含三个其他常规JPanel:Checkboxes面板与FlowLayout,tablePanel与BorderLayout,另一个与BoxLayout。
我正在使用BoderLayout.CENTER
将JTable添加到tablePanel,并且在运行程序之后,JTable的位置太大,我需要调整帧大小。我需要动态添加行,所以我使用自定义DefaultTableModel
创建了一个空的JTable(我重载了isCellEditable
方法,仅此而已),然后通过选中复选框我用数据填充它。
JTable也比它设计的最大行数大得多。
我的意思是说:
我怎么能缩小它?
我用add.(templatePanel)
代码:
public TemplatePanel()
{
model = new DefaultTableModel(new Object[][] {}, new String[]
{"<html>...</html>", "<html>...</html>",
"...", "...", "<html>...</html>",
"<html>...</html>", "...", "...",
"<html>...</html>"})
{
@Override
public boolean isCellEditable(int row, int column)
{
return column == 1 || column == 3;
}
};
templatePanel = new JPanel();
tablePanel = new JPanel();
templatePanel.setLayout(new BoxLayout(templatePanel, BoxLayout.PAGE_AXIS));
tablePanel.setLayout(new BorderLayout());
checkBoxPanel = new JPanel();
checkBoxPanel.setLayout(new FlowLayout());
1 = new JCheckBox("...");
2 = new JCheckBox("...");
3 = new JCheckBox("...");
4 = new JCheckBox("...");
5 = new JCheckBox("...");
6 = new JCheckBox("...");
checkBoxPanel.add(1);
checkBoxPanel.add(2);
checkBoxPanel.add(3);
checkBoxPanel.add(4);
checkBoxPanel.add(5);
checkBoxPanel.add(6);
1.addItemListener(this);
2.addItemListener(this);
3.addItemListener(this);
4.addItemListener(this);
5.addItemListener(this);
6.addItemListener(this);
table = new JTable(model);
scrollPane = new JScrollPane(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setTableHeader(new JTableHeader(table.getColumnModel())
{
@Override
public Dimension getPreferredSize()
{
Dimension d = super.getPreferredSize();
d.height = 50;
return d;
}
});
TableColumn firstColumn = table.getColumnModel().getColumn(0);
TableColumn secondColumn = table.getColumnModel().getColumn(1);
TableColumn thirdColumn = table.getColumnModel().getColumn(2);
TableColumn ninthColumn = table.getColumnModel().getColumn(8);
firstColumn.setPreferredWidth(170);
secondColumn.setPreferredWidth(50);
thirdColumn.setPreferredWidth(30);
ninthColumn.setPreferredWidth(100);
table.setRowHeight(30);
tablePanel.add(scrollPane, BorderLayout.NORTH);
templatePanel.add(checkBoxPanel);
templatePanel.add(tablePanel);
add(templatePanel);
}
答案 0 :(得分:3)
基本逻辑应该是:
JTable table = new JTable(model);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
这将消除额外的垂直空间。
答案 1 :(得分:1)
如果我理解正确,您希望表格的框架更小吗?那是对的吗?如果您正在使用BorderLayout,则中心将覆盖整个帧,除非您在基本方向上添加内容。创建一个框并将其添加到SOUTH以在底部和桌子之间创建缓冲。 再说一次,如果我没有正确理解这一点,我会道歉。
编辑:
您是否尝试在滚动窗格上使用setPreferredSize(new Dimension(800,500))?