gpt4 book ai didi

java - 在 JTable 上动态调整行高

转载 作者:行者123 更新时间:2023-12-01 17:29:10 25 4
gpt4 key购买 nike

我在 Stackoverflow 上发现了类似的问题,但由于某种原因,当我尝试实现建议的内容时,我遇到了一个奇怪的异常。

所以我试图动态调整其中 3 列的一些高度。

public class AcquisitionTechniquesPanel extends JPanel {
private static final long serialVersionUID = -3326535610858334494L;

public static final int SIZE_OF_TABLE = 8;

private final JTable table;
private JCheckBox acquisitionTechniquesDone;

private Object[][] tableData;
private final String[] columnNames;

public AcquisitionTechniquesPanel() {
this.columnNames = new String[] { ApplicationStrings.ID, ApplicationStrings.TYPE, "Foo", "Bar", "Biz", "Baz", "Boz", ApplicationStrings.NO_OF_AR_S };
this.table = new JTable(tableData, columnNames);

initGUI();
}


public void initGUI() {
table.setColumnSelectionAllowed(
table.setDragEnabled(false);
table.setOpaque(true);
table.getTableHeader().setReorderingAllowed(false);
table.setModel(new DefaultTableModel());
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(800, 320));

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
table.getColumnModel().getColumn(2).setCellRenderer(new VariableRowHeightRenderer());
table.getColumnModel().getColumn(3).setCellRenderer(new VariableRowHeightRenderer());
table.getColumnModel().getColumn(4).setCellRenderer(new VariableRowHeightRenderer());
}
});
}

public static class VariableRowHeightRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(String.valueOf(value));
if(getPreferredSize().height > 1)
table.setRowHeight(row, getPreferredSize().height);
return this;
}
}
}

现在,当我运行此代码时,由于某种原因,我得到 java.lang.ArrayIndexOutOfBoundsException: 2 >= 0我在代码 table.getColumnModel().getColumn(2).setCellRenderer(new VariableRowHeightRenderer()); 上遇到此异常这很奇怪,因为该表应该有 8 列。

有人知道我做错了什么吗?

请注意,我只显示相关代码

最佳答案

问题来自这里:

table.setModel(new DefaultTableModel());

您在 JTable 上设置了一个空模型,因此覆盖了您使用 JTable 构造函数创建的隐式模型。只需删除该行,您就应该拥有 8 列。

顺便说一句,无需将您的调用包装在 invokeLater 中。

关于java - 在 JTable 上动态调整行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12704530/

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