【问题标题】:Setting the height of a row in a JTable in java在java中设置JTable中行的高度
【发布时间】:2013-03-29 00:53:00
【问题描述】:

我一直在寻找一种能够增加 JTable 中行高的解决方案。我一直在使用 setRowHeight(int int) 方法,该方法可以编译并运行正常,但没有增加任何行 [s]。当我使用设置高度的行的 getRowHeight(int) 方法时,它会打印出我将行增加到的大小,所以我不确定出了什么问题。下面的代码是我试图解决它的粗略说明。

我的课程扩展了 JFrame。

String[] columnNames = {"Column 1", "Column 2", "Column 1 3"};

JTable table = new JTable(new DefaultTableModel(columnNames, people.size()));

DefaultTableModel model = (DefaultTableModel) table.getModel();

int count =1;
for(Person p: people)
{
    model.insertRow(count,(new Object[]{count, p.getName(), p.getAge()+"", 
    p.getNationality}));
    count++;
}

table.setRowHeight(1, 15);//Try set height to 15 (I've tried higher)

谁能告诉我哪里出错了?我正在尝试将第 1 行的高度增加到 15 像素?

【问题讨论】:

  • I re arranged my code as that example, and I even increased to height to 100, and still visable increase。这就是为什么你应该发布你的SSCCE 来证明这个问题。仅仅因为你说你在做某事并不意味着你真的在做。也许您错误地定义了两个表,并且您正在更改实际未显示的表的属性。
  • 对不起,我在循环中使用了 setRowHeight(int int) 方法,但将其更改为 setRowHeight(int) 并且现在可以正常工作。感谢回复,非常感谢

标签: java swing jtable row-height


【解决方案1】:

你可以使用:

table.setRowHeight(int par1);

或者如果您想为特定行设置行高,请使用:

table.setRowHeight(int par1, int par2);

【讨论】:

  • 感谢您的回复。正如你在我的代码中看到的,我已经调用了它,但似乎什么也没做。
  • 尝试使用model.setRowHeight()?因为您从表变量调用 getModel() 方法
  • 我在那里尝试过,编译器输出:在 DefaultTableModel 位置找不到符号 setRowHeight 吗?再次感谢
  • 尽量不要使用DefaultTableModel,我不明白你为什么需要使用它
  • -1 用于在模型中设置行高的疯狂猜测。 TableModel 没有行高。模型存储数据并在数据更改时通知视图。这与您使用 DefaultTableModel 还是任何其他 TableModel 无关。
【解决方案2】:

不确定将索引 0 处的第一行留空的目的是什么。 JTable 中的行从索引 0 开始运行。最好发布一个完整的示例(即 SSCCE)来演示这些问题。与这个工作正常的简单示例进行比较:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class DemoTable {
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("DemoTable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DefaultTableModel model = new DefaultTableModel();
        model.setColumnIdentifiers(new Object[] {
                "Column 1", "Column 2", "Column 3" });

        JTable table = new JTable(model);
        for (int count = 0; count < 3; count++){
            model.insertRow(count, new Object[] { count, "name", "age"});
        }
        table.setRowHeight(1, 30);

        frame.add(new JScrollPane(table));
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

【讨论】:

  • 非常感谢您的回复。当我将代码重新安排为您的示例时,它现在可以工作了。非常感谢
【解决方案3】:

在 JFrame 中的 JTable 上单击鼠标右键,然后单击“属性”。 向下滚动并设置 rowHeight 值。

【讨论】:

    【解决方案4】:

    你也可以添加一个tableModelListener?

    model.addTableModelListener(new TableModelListener() {
        @Override public void tableChanged(final TableModelEvent e) {
            EventQueue.invokeLater(new Runnable() {
                @Override public void run() {
                    table.setRowHeight(e.getFirstRow(), 15); //replace 15 with your own height
                }
            });
        }
    });
    

    【讨论】:

    • 感谢您的回复。我会在构造函数之外覆盖这些方法吗?与 JTable 一起
    • 这就是我所做的@DouglasGrealis。我的 JTable 类变成了 TableModelListener,我的表模型将它添加为 TableModelListener。
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2019-05-09
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2012-07-13
    相关资源
    最近更新 更多