Как центрировать значение в ячейке JTable
? Я использую Netbeans.
Как центрировать в ячейке JTable значение?
Ответ 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);
этот код в центр столбца