编辑:抱歉进行了许多编辑。我自己都忘记写了什么了。
我使用 JPanel,将 BoxLayout 作为 JFrame 的根面板。我向此根面板添加了另外两个面板:带有 FlowLayou 的 ButtonPanel 和 tabbedPane。每个选项卡式 Pane 都是通过按顶部的第二个按钮动态创建的。 tabbedPane 中有一个带有 BoxLayout 的 templatePanel,其中包含其他三个通用 JPanel:带有 FlowLayout 的复选框面板、带有 BorderLayout 的 tablePanel 和另一个带有 BoxLayout 的 tablePanel。
我使用 BoderLayout.CENTER
将 JTable 添加到 tablePanel 中,运行程序后 JTable 垂直太大,我需要调整框架大小。我需要动态添加行,因此我使用自定义 DefaultTableModel
创建一个空 JTable(我重载了 isCellEditable
方法,仅此而已),然后通过检查复选框我用数据填充它。
JTable 也比它设计容纳的最大行数太大。
我的意思是说:
我怎样才能缩小它?
我通过类的构造函数(扩展 JPanel)创建 templatePanel,只需 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);
}
最佳答案
基本逻辑应该是:
JTable table = new JTable(model);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
这将消除多余的垂直空间。
关于java - JTable 大于 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511875/