Установка высоты строки в JTable в java

Я искал решение, позволяющее увеличить высоту строки в 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)

Может ли кто-нибудь сказать мне, где я ошибаюсь? Я пытаюсь увеличить высоту строки 1 до 15 пикселей?


person Douglas Grealis    schedule 06.04.2013    source источник
comment
I re arranged my code as that example, and I even increased to height to 100, and still visable increase. Вот почему вы должны опубликовать свой SSCCE, демонстрирующий проблему. То, что вы говорите, что делаете что-то, не означает, что вы действительно это делаете. Возможно, вы по ошибке определили две таблицы и изменили свойство таблицы, которая на самом деле не отображается.   -  person camickr    schedule 06.04.2013
comment
Извините, мой плохой, я использовал метод setRowHeight (int int) в цикле, но изменил его на setRowHeight (int), и теперь он работает отлично. Спасибо за ответы, очень признателен   -  person Douglas Grealis    schedule 06.04.2013


Ответы (4)


Не уверен, каково намерение оставить первую строку с индексом 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();
            }
        });
    }
}
person tenorsax    schedule 06.04.2013
comment
Большое спасибо за ответ. Поскольку я переделал код в соответствии с вашим примером, теперь он работает. Очень признателен - person Douglas Grealis; 06.04.2013

Ты можешь использовать:

table.setRowHeight(int par1);

или если вы хотите установить высоту строки для определенной строки, используйте:

table.setRowHeight(int par1, int par2);

person madcrazydrumma    schedule 06.04.2013
comment
Спасибо за ответ. Как вы можете видеть в моем коде, я уже вызывал его, но, похоже, ничего не сделал. - person Douglas Grealis; 06.04.2013
comment
Попробуйте использовать model.setRowHeight()? так как вы вызываете метод getModel() из переменной таблицы - person madcrazydrumma; 06.04.2013
comment
Я пробовал это там, и компилятор выводит: не могу найти символ setRowHeight в расположении DefaultTableModel? Еще раз спасибо - person Douglas Grealis; 06.04.2013
comment
Попробуйте не использовать DefaultTableModel, я не понимаю, зачем вам это нужно. - person madcrazydrumma; 06.04.2013
comment
Насколько большим вы хотите, чтобы он был? На моей машине 15 пикселей кажутся немного меньше размера по умолчанию. Попытка чего-то гораздо большего, например 60, доказывает, что ваш код работает так, как должен. Может быть, вы хотите, чтобы он был на 15 пикселей больше, чем по умолчанию? table.setRowHeight(1, table.getRowHeight(1) + 15); - person jmclellan; 06.04.2013
comment
-1 за дикую догадку об установке высоты строки в модели. TableModel не имеет высоты строки. Модель хранит данные и уведомляет представление об изменении данных. Это не имеет никакого отношения к тому, используете ли вы DefaultTableModel или любую другую TableModel. - person camickr; 06.04.2013
comment
Спасибо за вашу помощь. Я перестроил свой код и заработал размеры высоты. Очень ценится - person Douglas Grealis; 06.04.2013

Щелкните правой кнопкой мыши JTable в JFrame и выберите "Свойства". Прокрутите вниз и установите значение rowHeight.

установить значение rowHeight

person msl    schedule 12.03.2018

Вы также можете добавить 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
            }
        });
    }
});
person madcrazydrumma    schedule 06.04.2013
comment
Спасибо за ответ. Могу ли я переопределить эти методы вне конструктора? Наряду с JTable - person Douglas Grealis; 06.04.2013
comment
Это то, что я сделал @DouglasGrealis. Мой класс JTable стал TableModelListener, а моя модель таблицы добавила его как TableModelListener. - person Michael Fayad; 18.04.2016