Как выровнять все ячейки и заголовки jtable сразу?

Существует ли -->эффективный‹-- способ центрировать все сразу?

Я не против, если это в части инициализации или после нее, оба приветствуются.

Мой код до сих пор:

jTable2 = new javax.swing.JTable();

jTable2.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    },
    new String [] {
        "header1", "header2", "header3"
    }
)); 

Мне удалось центрировать заголовки, но центрировать все по частям просто неправильно: S

DefaultTableCellRenderer renderer;
renderer = (DefaultTableCellRenderer)
            jTable2.getTableHeader().getDefaultRenderer();
renderer.setHorizontalAlignment(JLabel.CENTER);

person user2692669    schedule 24.11.2013    source источник


Ответы (2)


Я полагаю, вы можете получить ссылку на этот вопрос: java - Как центрировать в Ячейка JTable является значением? - Переполнение стека
И второй центр ответов, все столбцы с циклом всегда работает правильно для меня.

P.S. как упоминал @camickr, второй ответ может привести к потере пользовательского рендеринга.

Согласно Как использовать таблицы, если мы используем конструктор ниже.

  • JTable(Object[][] rowData, Object[] columnNames)
  • JTable (векторные данные строки, векторные имена столбцов)

Затем они будут обрабатывать все типы данных как строки. В этой ситуации второй ответ будет работать хорошо.

Но если пользователь переопределил функцию getColumnClass(int c) в AbstractTableModel (см. здесь TableDemo .java), то второй ответ приведет к потере рендерера по умолчанию: рендеринг по умолчанию будет печатать логический тип в качестве флажка, после использования второго ответа таблица вместо этого будет печатать «true»/«false».

Итак, если вы хотите использовать рендеринг по умолчанию и центрировать ячейку одновременно. Этот ответ поможет вам:
java - Переопределение DefaultTableCellRenderer JTable для центрирования всех ячеек в JTable - javascript - CodeRoad

person by_unicorn    schedule 24.11.2013
comment
Второй ответ не является хорошим решением. Конечно, это работает, если у вас есть только строки. Но если у вас есть числа или даты в таблице, вы потеряете пользовательский рендеринг этих объектов. - person camickr; 25.11.2013
comment
Я согласен с @camickr. Кроме того, это кажется обходом проблемы, а не решением. - person user2692669; 25.11.2013
comment
Привет, @camickr и user2692669, я изменил свой ответ, так как моя репутация низкая и я не могу добавлять комментарии под чужими сообщениями, вместо этого я отправляю ответ. В любом случае, большое спасибо за ваши комментарии! Теперь я лучше понимаю рендеринг JTable. - person by_unicorn; 25.11.2013

это может быть немного старый пост, но для тех, кто ищет ту же проблему, что и я.

это для того, чтобы множество таблиц можно было легко выровнять одновременно (я немного ленив в этом, поэтому я продолжаю искать и пробовать самый простой способ: P).

    ArrayList<JTable> Tables = new ArrayList(); //JTable or javax.swing.JTable ... as it confused me as a beginner in Java codding

    Tables.add(jTable1);
    Tables.add(jTable2);
        //.........
        //.........

    DefaultTableCellRenderer centerRenderer_c = new DefaultTableCellRenderer();
    DefaultTableCellRenderer centerRenderer_h = new DefaultTableCellRenderer();
    centerRenderer_c.setHorizontalAlignment( javax.swing.JLabel.CENTER );

    for(JTable t : Tables){
        t.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);// this will reverse the headers visually 

        //for the headers :
        centerRenderer_h = (DefaultTableCellRenderer)t.getTableHeader().getDefaultRenderer();
        centerRenderer_h.setHorizontalAlignment( javax.swing.JLabel.CENTER );

        //for cells :
        for(int i=0; i < t.getColumnCount(); i++){
            t.getColumnModel().getColumn(i).setCellRenderer(centerRenderer_c);
        }
    }
person OmAr    schedule 25.02.2014