开发者

How can I change JTable's header background color?

开发者 https://www.devze.com 2023-04-13 00:58 出处:网络
I\'ve tried: table.getTableHeader().setBackground(Color.BLACK); Doesn\'t work. EDIT: This code doesn\'t work in my project only. Works in other projects. I may have changed a property that stops t

I've tried:

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

Doesn't work.

EDIT: This code doesn't work in my project only. Works in other projects. I may have changed a property that stops the color开发者_JS百科 from changing. Or maybe NetBeans has some property which keeps the default colors. I've noticed something else. The color of the header in my project is shining in a different way. In the examples where the color change works, I see different graphics.

EDIT 2: Something else. I noticed that the buttons won't change color either. Must be something generic. Hope this helps. Unfortunately SSCCE won't work in this case, because I can't recreate the problem. I am surely using the right component names.


Try this:

table.getTableHeader().setOpaque(false);

then set the background of jtable header

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


It works for me. Here's my 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));
   }
}

If this doesn't help you, then I suggest that you create and post your own SSCCE so that we can see what's wrong.


I recommend you to do this:

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


The table header also uses a renderer component, like table cells.

Look at this:

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

If you do not need a dynamic color, you can also set the color in the constructor of the renderer.


Solved it. In NetBeans:

  • Right click on project's name
  • Properties
  • Application - Desktop App
  • Look and Feel: choose 'Java Default' (didn't work with System Default)
  • Remember to Clean And Rebuild before running project

Also the graphics of the whole project changed appearance.


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


This question is old but I have the right answer, I guess...

All that you have to do is set opaque to true.

e.g.

yourComponent.setOpaque(true);

I hope this can help someone in the future.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号