【问题标题】:JTable all column aligned rightJTable所有列右对齐
【发布时间】:2013-09-26 08:55:33
【问题描述】:

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

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

让我只对齐一列,但我需要全部对齐。

【问题讨论】:

  • 通过 CSS 可能会选择您喜欢的布局。
  • 什么CSS?你说的不是 WEB 的 CSS 吧?

标签: java swing jtable alignment tablecellrenderer


【解决方案1】:

您可以通过在 JTable 中覆盖 prepareRenderer(...) 来实现。这假定任何自定义渲染器都是 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);
  }
}
【解决方案2】:

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

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

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

【讨论】:

  • 如果我们不使用DefaultTableCellRenderer,我们能否得到答案?
  • @searchengine27,不知道渲染器是什么的你怎么回答?
  • 你为什么会在所有近乎无限的可能性中假设一个渲染器首先是DefaultTableCellRenderer?我会承认它可能会成为最常见的一种,但我更希望得到一个从TableCellRenderer 构建单元渲染器的答案,这样我就可以了解如何构建该功能以及它是如何工作的。跨度>
  • @searchengine27,这个问题是关于右对齐文本的。您如何为现有的所有可能的渲染器提供示例?这就是我通过回答澄清的原因。如果您只是想知道如何创建自定义渲染器,那么这是一个不同的问题,您可以阅读 Swing 教程中关于 [使用自定义渲染器]() 的部分,以获取通过实现接口创建自定义渲染器的示例。
猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多