【问题标题】:JTable alignment of cell content in custom Renderer自定义渲染器中单元格内容的 JTable 对齐
【发布时间】:2013-12-16 14:58:23
【问题描述】:

我想将我的 JTable 第一列的内容对齐到中心,但我无法让它工作。如果我在没有自定义渲染器的情况下设置它,我可以让它工作,但它会覆盖我尝试对行颜色进行的更改。

Eclipse 告诉我方法 setHorizo​​ntalAlignment 没有为类型 Component 定义,但这并没有引起我的注意。有什么我想念的想法吗?

final TableCellRenderer renderer = table_1.getDefaultRenderer(Object.class);
    table_1.setDefaultRenderer(Object.class, new TableCellRenderer()    {
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
      {
        Component c = renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        c.setBackground(row % 4 == 2 || row % 4 == 3 ? new Color(230,230,230) : Color.WHITE);
        c.setHorizontalAlignment(JLabel.CENTER);
        return c;
      }
    }); 

【问题讨论】:

    标签: java swing jtable jlabel tablecellrenderer


    【解决方案1】:

    声明变量 c 并将其强制转换为 JLabel:

    JLabel c = (JLabel) renderer.getTableCellRendererComponent(...);
    

    DefaultTableCellRenderer 的 API 会告诉你这个类实际上是从 JLabel 派生的,它有你感兴趣的方法。

    【讨论】:

    • 谢谢,现在完美运行。现在我如何才能将对齐仅应用于我的 JTable 的第一列,而将颜色应用于整个 JTable?我不能使用 getColumnModel().getColumn(0) 因为据我所知 JLabel 不支持它?
    • @cflx:仔细查看getTableCellRendererComponent方法的参数列表。您应该使用其中一个参数和一点点if (...) 逻辑。我敢打赌你能弄清楚这一点。 ;)
    • @cflx:我知道你会的。
    • 现在我遇到了单元格渲染器的另一个问题:我试图在特定的单元格选择中显示一个图标,在第一列中每隔一个单元格显示一个图标。我的代码如下所示: if (column == 0 && row % 2 == 0) {c.setIcon(edit);} 但它现在在我的表格的每个单元格中显示一个图标。我做错了什么?
    • 我明白了:我必须 c.setIcon(null);在 JLabel 上投射渲染器之后。
    猜你喜欢
    • 2011-11-08
    • 1970-01-01
    • 2013-09-04
    • 2011-10-02
    • 2012-08-05
    • 2012-10-03
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多