JTable все столбцы выровнены по правому краю

Есть ли способ выровнять все столбцы в jtable одновременно? используя это:

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment( JLabel.RIGHT );
JTAB_TABLE.getColumnModel().getColumn(0).setCellRenderer( rightRenderer );

позволит мне выровнять только один столбец, но мне нужно выровнять все.


person Mohammed Falha    schedule 20.09.2013    source источник
comment
С помощью CSS можно выбрать свой любимый макет.   -  person Roman C    schedule 21.09.2013
comment
какой СС? угрюмо, вы не говорите о CSS WEB, верно?   -  person Mohammed Falha    schedule 21.09.2013


Ответы (2)


Обычно таблица содержит различные типы данных (дата, число, логическое значение, строка), и нет смысла принудительно выравнивать все типы данных по правому краю.

Однако если у вас есть таблица со всеми данными одного типа и вы хотите, чтобы рендеринг всех столбцов был одинаковым, вам, вероятно, следует использовать один и тот же рендерер. Предполагая, что вы используете средство визуализации по умолчанию, вы можете использовать:

DefaultTableCellRenderer renderer = (DefaultTableCellRenderer)table.getDefaultRenderer(Object.class);
renderer.setHorizontalAlignment( JLabel.RIGHT );
person camickr    schedule 20.09.2013
comment
можем ли мы получить ответ, если предположить, что мы не используем DefaultTableCellRenderer, пожалуйста? - person searchengine27; 10.11.2015
comment
@searchengine27, как ты можешь давать ответ, если не знаешь, что такое рендерер? - person camickr; 10.11.2015
comment
почему вы предполагаете, что единственный рендерер из всех почти бесконечных возможностей будет в первую очередь DefaultTableCellRenderer? Я предполагаю, что это, вероятно, будет одним из самых распространенных, но я был бы признателен за ответ, который создает средство визуализации ячеек из TableCellRenderer, чтобы я мог увидеть, как создать эту функциональность и как она будет работать. - person searchengine27; 10.11.2015
comment
@searchengine27, этот вопрос касается выравнивания текста по правому краю. Как вы можете привести пример для всех возможных существующих рендереров? Вот почему я уточнил ответ. Если вы просто хотите знать, как создать пользовательский рендерер, то это другой вопрос, и вы можете прочитать раздел из руководства Swing [Использование пользовательских рендереров]() для примера создания пользовательского рендерера путем реализации интерфейса. - person camickr; 10.11.2015

Вы можете сделать это, переопределив prepareRenderer(...) в JTable. Это предполагает, что любые пользовательские средства визуализации являются JLabels (по умолчанию они JLabels). В противном случае вам пришлось бы остерегаться этого.

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableDemo implements Runnable
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new TableDemo());
  }

  public void run()
  {
    JTable table = new JTable(5, 5)
    {
      @Override
      public Component prepareRenderer(TableCellRenderer renderer,
                                       int row, int col)
      {
        Component comp = super.prepareRenderer(renderer, row, col);
        ((JLabel) comp).setHorizontalAlignment(JLabel.RIGHT);
        return comp;
      }
    };
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    JScrollPane scrollPane = new JScrollPane(table);

    JFrame frame = new JFrame();
    frame.getContentPane().add(scrollPane);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}
person splungebob    schedule 20.09.2013