JTable所有列都对齐了

时间:2013-09-20 20:57:34

标签: java swing jtable alignment tablecellrenderer

有没有办法同时对齐jtable中的所有列? 用这个:

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

让我只对齐一列,但我需要对齐所有。

2 个答案:

答案 0 :(得分:5)

通常,表包含不同类型的数据(日期,数字,布尔值,字符串),强制所有类型的数据都正确对齐是没有意义的。

但是,如果您有一个包含所有相同类型数据的表,并且您希望强制所有列的渲染相同,那么您应该使用相同的渲染器。假设您使用的是默认渲染器,则可以使用:

DefaultTableCellRenderer renderer = (DefaultTableCellRenderer)table.getDefaultRenderer(Object.class);
renderer.setHorizontalAlignment( JLabel.RIGHT );

答案 1 :(得分:2)

您可以通过覆盖JTable中的prepareRenderer(...)来实现。这假定任何自定义渲染器都是JLabel(默认情况下它们是JLabel)。否则你必须要防范它。

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);
  }
}