Подтвердить что ты не робот

Как центрировать в ячейке JTable значение?

Как центрировать значение в ячейке JTable? Я использую Netbeans.

4b9b3361

Ответ 1

Вам нужно настроить рендер. Чтобы центрировать первую колонку, вы можете:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );

Чтобы центрировать все столбцы со строковыми данными, вы можете сделать:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);

Ответ 2

Другим хорошим способом центрирования всех столбцов является цикл:

 for(int x=0;x<numberofcols;x++){
         table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
        }

Ответ 3

Здесь вы идете:

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;

public class JTableUtilities
{
    public static void setCellsAlignment(JTable table, int alignment)
    {
        DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
        rightRenderer.setHorizontalAlignment(alignment);

        TableModel tableModel = table.getModel();

        for (int columnIndex = 0; columnIndex < tableModel.getColumnCount(); columnIndex++)
        {
            table.getColumnModel().getColumn(columnIndex).setCellRenderer(rightRenderer);
        }
    }
}

Использование:

JTableUtilities.setCellsAlignment(table, SwingConstants.CENTER);

Ответ 4

Вместо JLabel.CENTER вы можете использовать SwingConstants.CENTER.

Ответ 5

У меня была аналогичная проблема. Я хотел выровнять одну ячейку в зависимости от значения другой ячейки. Если ячейка X была NULL, то ячейка Y должна быть выровнена вправо. Else, ячейка Y должна быть выровнена влево.

Я нашел это решение действительно полезным. Он состоит в создании пользовательского Render, расширяющего DefaultTableCellRender.

Здесь код:

public class MyRender extends DefaultTableCellRenderer{

@Override
 public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){
    super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column);
    MyTableModel mtm = (MyTableModel)table.getModel();
    switch(column){
        case Y : 
            if(mla.getValueAt(row,X)!=null)
                setHorizontalAlignment(SwingConstants.RIGHT);
            else
                setHorizontalAlignment(SwingConstants.LEFT);
            break;
     }
    return this;
   }

 }

После этого просто создайте новый экземпляр MyRender и установите его в столбце Y в этом случае. Я делаю это, когда загружаю информацию в таблицу.

MyRender render = new MyRender();
table.getColumnModel().getColumn(Y).setCellRender(render);

Надеюсь, это полезно!

Ответ 6

((DefaultTableCellRenderer) jTable1.getTableHeader().getDefaultRenderer())
            .setHorizontalAlignment(JLabel.CENTER); // header to center

Этот центр заголовка кода jtable

DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
    rendar.setHorizontalAlignment(jLabel1.CENTER);

    jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar); 

этот код в центр столбца