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

标签 java swing jtable

我正在为 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/

相关文章:

java - 表模型更新 + fireTableDataChanged() 打乱表选择

java - 使用for循环从数据库检索数据

java - 某些字符串的 DateFormat 模式

java - 如何在java中比较字符串数组列表值和数组字符串值

java - 使用 GridLayout 垂直对齐 jpanels 的组件

java - 如何比较jLabel的边框粗细?

java - Spring Boot 表单输入为空

java - Hibernate将数据保存到数据库SQLException

java - Java Swing UI 属性列表?

java - 我想把这个白色的小东西藏在 JTable 上