当前位置: 首页 > 知识库问答 >
问题:

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

庄浩言
2023-03-14
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);
            }
        });
    }
}

谢谢,

詹姆斯

共有1个答案

柯星华
2023-03-14
table.setRowHeight(row, height);

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

基本上,我希望将行高度存储在表模型之外,

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

 类似资料:
  • 问题内容: 我遇到了一个旧的可变高度导航问题:顶部导航,底部导航。异步加载数据时,导航可以更改高度,因此内容的边距也必须随之更改。 我希望这是自给自足的。因此,没有代码在何处加载数据,而仅在涉及的html-elements / directives中。 目前,我正在AngularJS 1.2.0中使用如下计时器进行操作: 这有一个明显的 缺点,那就是使用计时器 (我觉得这很丑陋),并且 在调整导航

  • 我想在EMF Compare的匹配结果中隐藏一些树节点,因为它们只是对我们的用户没有意义的容器。 null 谢谢, 马蒂亚斯

  • 问题内容: 我需要获取隐藏的div内的元素的高度。现在,我显示div,获取高度,然后隐藏父div。这似乎有点愚蠢。有没有更好的办法? 我正在使用jQuery 1.4.2: 问题答案: 您可以做这样的事情,但是有点笨拙,请忘记它是否已经是绝对的:

  • 问题内容: 我有一个包含几列的HTML表,我需要使用jquery实现一个列选择器。当用户单击复选框时,我要隐藏/显示表中的相应列。我想在不将类附加到表中的每个td的情况下执行此操作,是否可以使用jquery选择整个列?以下是HTML的示例。 问题答案: 我想做到这一点而不必在每个td上附加一个类 就个人而言,我会采用“每课时听课/课时/上课”的方法。然后,您可以通过对容器上的className的一

  • 问题内容: 我有一张表格,每行都有一个隐藏字段。单击该行中的按钮时,我需要提醒隐藏字段的值。我有以下jQuery代码。但这行不通。我们如何使其工作? HTML 问题答案: 您的选择器以开头,但不是的直接子项,因此请按以下方式更改选择器:

  • 我在JavaFX中有一个这样的表: @FXML私有表视图表EF; 例如,当我按下一个按钮或更改ComboBox中的值时,如何将它从GUI中完全隐藏起来,当我按下另一个按钮或再次更改ComboBox中的值后,如何使它再次可见? 编辑: Edit2:问题“JavaFX - setVisible不会”隐藏“元素”不是一个解决方案,因为对他来说,setInvisible是有效的,因为它使vBox不可见,只