Как центрировать в ячейке JTable значение? - PullRequest
26 голосов
/ 15 сентября 2011

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

Ответы [ 6 ]

51 голосов
/ 15 сентября 2011

Вам необходимо настроить рендер. Для центрирования первого столбца вы можете сделать:

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

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

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
centerRenderer.setHorizontalAlignment( JLabel.CENTER );
table.setDefaultRenderer(String.class, centerRenderer);
7 голосов
/ 29 января 2012

Еще один хороший способ центрировать все столбцы с помощью цикла:

 for(int x=0;x<numberofcols;x++){
         table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
        }
4 голосов
/ 29 мая 2016

Вот, пожалуйста:

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);
2 голосов
/ 24 апреля 2014

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

1 голос
/ 12 августа 2017
((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); 

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

1 голос
/ 19 февраля 2016

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

Я нашел это решение действительно полезным.Он состоит в создании пользовательского рендера, расширяющего 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);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...