gpt4 book ai didi

java - JTable 大于 JFrame

转载 作者:行者123 更新时间:2023-12-01 18:07:09 30 4
gpt4 key购买 nike

编辑:抱歉进行了许多编辑。我自己都忘记写了什么了。

我使用 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 也比它设计容纳的最大行数太大。我的意思是说: enter image description here我怎样才能缩小它?

我通过类的构造函数(扩展 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com