如何更改JTable标题背景颜色?

时间:2011-10-15 16:07:01

标签: java swing netbeans jtable jtableheader

我试过了:

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

不起作用。

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

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

6 个答案:

答案 0 :(得分:11)

它对我有用。这是我的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,以便我们可以看到错误。

答案 1 :(得分:9)

试试这个...... 。table.getTableHeader()setOpaque(假);

然后设置jtable标题的背景

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

答案 2 :(得分:7)

我建议你这样做:

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

答案 3 :(得分:3)

表头还使用渲染器组件,如表格单元格。

看看这个:

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

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

答案 4 :(得分:1)

解决了它。 在NetBeans中:

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

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

答案 5 :(得分:-1)

这个问题很老,但是我想我的答案是正确的。

您要做的所有事情都是将不透明设置为true

例如

yourComponent.setOpaque(true);

我希望这可以在将来对某人有所帮助。