在Java中设置JTable中行的高度

20

我一直在寻找一种解决方法,可以增加JTable中一行的高度。我一直在使用setRowHeight(int int)方法编译和运行都没有问题,但是行高并没有增加。当我使用我设置高度的行的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)

有人能告诉我哪里出了问题吗?我想将第一行的高度增加到15像素。


2
我按照那个例子重新排列了我的代码,甚至将高度增加到了100,但仍然没有看到任何可见的变化。这就是为什么你应该发布一个SSCCE来演示问题。仅仅因为你说你在做某事并不意味着你真的在做它。也许你错误地定义了两个表格,并且正在更改实际上没有显示的表格的属性。 - camickr
抱歉我的错误,我在循环中使用了setRowHeight(int int)方法,但是现在改成了setRowHeight(int),现在完美地运行了。感谢您的回复,非常感激。 - Douglas Grealis
4个回答

28

您可以使用:

table.setRowHeight(int par1);

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

table.setRowHeight(int par1, int par2);


谢谢回复。正如您在我的代码中所看到的,我已经调用了它,但似乎没有任何作用。 - Douglas Grealis
尝试使用 model.setRowHeight() 方法吧,因为您正在从表变量中调用 getModel() 方法。 - madcrazydrumma
我已经在那里尝试过了,编译器输出:在DefaultTableModel的位置找不到setRowHeight符号?再次感谢。 - Douglas Grealis
你想要它有多大?在我的机器上,15像素似乎比默认大小稍微小一些。尝试使用更大的值,如60,可以证明你的代码按预期工作。也许你想要比默认值大15像素? table.setRowHeight(1, table.getRowHeight(1) + 15); - jmclellan
3
不要对在模型中设置行高的猜测打分。TableModel 没有行高度。模型存储数据并在数据更改时通知视图。这与您是否使用 DefaultTableModel 或任何其他 TableModel 无关。 - camickr
显示剩余2条评论

23

不确定将索引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();
            }
        });
    }
}

1
非常感谢您的回复。我按照您的示例重新排列了代码,现在它可以正常工作了。非常感激。 - Douglas Grealis

4

在JFrame中右键单击JTable,然后点击属性。 向下滚动并设置rowHeight值。

set rowHeight value


2

您还可以添加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一起吗? - Douglas Grealis
这就是我做的@DouglasGrealis。我的JTable类成为了一个TableModelListener,我的表格模型将其添加为一个TableModelListener。 - Michael Fayad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接