gpt4 book ai didi

java - JTable 中的可变行高;比在隐藏表模型列中存储高度值更好的方法?

转载 作者:行者123 更新时间:2023-12-02 07:00:05 27 4
gpt4 key购买 nike

我正在为 JTable 编写一个单元格渲染器,它允许每行具有不同的高度。对于表中的每一列,我都在表中添加了一个相邻的隐藏列,该列仅包含行高的 int 值。我认为这会效率低下,并且当我实现更复杂的大小调整时会带来问题。

有没有办法让主类初始化一个静态列表,并可以通过 getTableCellRendererComponent 访问该列表?

这是我当前正在做的事情的一个独立示例:

import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;


public class variableRowHeightDemo extends JFrame {

public variableRowHeightDemo() {
JTable vr_table = new JTable();

vr_table.setModel(new DefaultTableModel(
new Object[][]{
{"Height: 30", 30},
{"Height: 60", 60},
{"Height: 90", 90},},
new String[]{
"String", "int height value"
}));

vr_table.setDefaultRenderer(Object.class, new variableRowHeightRenderer());

add(vr_table);
pack();
}

static class variableRowHeightRenderer extends JTextField implements TableCellRenderer {

@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int col) {

// rows heights stored in second invis column
int height = (int) table.getModel().getValueAt(row, 1);
table.setRowHeight(row, height);

this.setText(value.toString());
return this;
}
}

public static void main(String[] args) {

java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new variableRowHeightDemo().setVisible(true);
}
});
}
}

基本上,我想将行高存储在表模型之外,但我不确定如何从子类访问它们而不使行高列表最终确定。另外,如果我的实现有任何明显的问题,我将很高兴听到它们。

谢谢

詹姆斯

最佳答案

table.setRowHeight(row, height);

该行代码不应在渲染器中使用。您不应在渲染中更改表的属性。您发布的代码将导致无限循环,因为渲染器更改高度,然后表格重新绘制行...

Basically, I want to store the row heights outside of the table model,

向模型添加数据时使用 table.setRowHeight() 方法有什么问题吗?您可以同时更新表格。

关于java - JTable 中的可变行高;比在隐藏表模型列中存储高度值更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16766688/

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