【问题标题】:How can I change JTable's header background color?如何更改 JTable 的标题背景颜色?
【发布时间】:2011-10-15 16:07:00
【问题描述】:

我试过了:

table.getTableHeader().setBackground(Color.BLACK);

没用。

编辑:此代码仅在我的项目中不起作用。在其他项目中工作。我可能更改了阻止颜色更改的属性。或者也许 NetBeans 有一些属性可以保持默认颜色。我注意到了别的东西。我的项目中标题的颜色以不同的方式闪耀。在颜色变化有效的示例中,我看到了不同的图形。

编辑 2:别的东西。我注意到按钮也不会改变颜色。必须是通用的东西。希望这可以帮助。不幸的是,SSCCE 在这种情况下不起作用,因为我无法重现问题。我肯定使用了正确的组件名称。

【问题讨论】:

  • 这与 NetBeans 保持一些默认颜色无关,而与您的代码中的错误有关,但只是声明“此代码仅在我的项目中不起作用”,并且没有任何代码,最好是 sscce,我怀疑除了建议您尝试更深入地调试之外,我们中的任何人都可以为您提供更多帮助。也许您尝试更改标题颜色的表格与显示的表格对象不同,但同样没有可理解且最好可编译的代码,这只是我的一个 SWAG?
  • 更改默认颜色:UIManager.put("TableHeader.background", Color.ORANGE);.

标签: java swing netbeans jtable jtableheader


【解决方案1】:

试试这个:

table.getTableHeader().setOpaque(false);

然后设置jtable header的背景

table.getTableHeader().setBackground(Color.BLACK);

【讨论】:

    【解决方案2】:

    它对我有用。这是我的SSCCE

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class TableHeaderBackground {
       public static void main(String[] args) {
          Integer[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
          String[] cols = {"A", "B", "C"};
    
          JTable table = new JTable(data, cols);
    
          JTableHeader header = table.getTableHeader();
          header.setBackground(Color.black);
          header.setForeground(Color.yellow);
    
          JOptionPane.showMessageDialog(null, new JScrollPane(table));
       }
    }
    

    如果这对您没有帮助,那么我建议您创建并发布自己的SSCCE,以便我们查看问题所在。

    【讨论】:

    • 确实有效。对于我的桌子虽然它不起作用。见编辑。
    【解决方案3】:

    我建议你这样做:

    DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer();
    headerRenderer.setBackground(new Color(239, 198, 46));
    
    for (int i = 0; i < myJTable.getModel().getColumnCount(); i++) {
            myJTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer);
    }
    

    【讨论】:

      【解决方案4】:

      表格标题也使用渲染器组件,如表格单元格。

      看看这个:

      table.getTableHeader().setDefaultRenderer(new DefaultTableRenderer(){
        {
          // you need to set it to opaque
          setOpaque(true);
        }
      
      @Override
      public Component getTableCellRendererComponent(final JTable table,
        final Object value, final boolean isSelected, final boolean hasFocus,
        final int row, final int column) {
          // set the background
          setBackground(yourDesiredColor);
        }
      });
      

      如果不需要动态颜色,也可以在渲染器的构造函数中设置颜色。

      【讨论】:

        【解决方案5】:

        解决了。 在 NetBeans 中:

        • 右键单击项目名称
        • 属性
        • 应用程序 - 桌面应用程序
        • 外观:选择“Java 默认”(不适用于系统默认)
        • 记得在运行项目之前清理和重建

        整个项目的图形也改变了外观。

        【讨论】:

        • 看起来此选项仅适用于 Java Desktop Application 类型的 NetBeans 项目。考虑更新问题以包含标签jsr296
        • 我仍然认为可以在代码中解决,您可能没有为正确的参考设置属性。
        • 我建议你把你的项目用源代码 jar 并上传到某个地方,然后让我们看看。
        • 谢谢。我讨厌 netbeans 设置像这样覆盖我的显式更改。 PS,我得到与 OP 相同的行为,我认为这不是他的代码。 netbeans GUI builder 在代码库的多个位置设置 UI 属性。如果您使用 GUI 构建器,这些将相当分散,因此很难将其复制并粘贴到 SO 中易于处理的内容中
        【解决方案6】:
        private void table_head_color(JTable table_name){
            DefaultTableCellRenderer head_render = new DefaultTableCellRenderer(); 
                
            head_render.setBackground(new Color(204,153,255));
            table_name.getTableHeader().setDefaultRenderer(head_render);
        
            //to call above method
            //table_head_color("write table name");
        }
        

        【讨论】:

          【解决方案7】:

          这个问题很老,但我猜我有正确的答案......

          您所要做的就是将不透明设置为true

          例如

          yourComponent.setOpaque(true);
          

          我希望这可以帮助将来的人。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-02
            • 2015-10-24
            • 2011-04-21
            • 1970-01-01
            • 2012-07-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多