java - 如何在已创建的 JTable 中交替行颜色?

标签 java swing colors jtable

我知道如何使用此代码交替行颜色:

JTable table = new JTable(){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column){
    Component returnComp = super.prepareRenderer(renderer, row, column);
    Color alternateColor = Color.YELLOW;
    Color whiteColor = Color.WHITE;
    if (!returnComp.getBackground().equals(getSelectionBackground())){
        Color bg = (row % 2 == 0 ? alternateColor : whiteColor);
        returnComp .setBackground(bg);
        bg = null;
    }
    return returnComp;
};

现在我想在执行时更改交替行颜色(例如,单击按钮并将交替行颜色从黄色更改为灰色)。

我该怎么做?

最佳答案

使您的 JTable 成为一个完整的类(而不是您在问题中使用的匿名类),然后创建一个方法来进行切换。

public class AlternatingJTable extends JTable {
  private static final Color ALTERNATE_ONE = Color.YELLOW;
  private static final Color ALTERNATE_TWO = Color.GRAY;

  private Color alternateColor = ALTERNATE_ONE;
  private Color whiteColor = Color.WHITE;

  @Override
  public Component prepareRenderer(TableCellRenderer renderer, int row, int column){
    Component returnComp = super.prepareRenderer(renderer, row, column);

    if (!returnComp.getBackground().equals(getSelectionBackground())){
        Color bg = (row % 2 == 0 ? alternateColor : whiteColor);
        returnComp .setBackground(bg);
        bg = null;
    }
    return returnComp;
  };

  public void toggleAlternateColor() {
    if(this.alternateColor == ALTERNATE_ONE) {
      this.alternateColor = ALTERNATE_TWO;
    } else {
      this.alternateColor = ALTERNATE_ONE;
    }
  }
}

然后,在您的actionListener 中,执行

public void actionPerformed(ActionEvent e) { 
  myAlternatingJTable.toggleAlternateColor();
}

关于java - 如何在已创建的 JTable 中交替行颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275869/

相关文章:

java - 如何通过代理在 Java 中发送原始 http 请求

java - JDialog:防止父框架关闭

java - 如何更改actionPerformed()中的Swing Timer Delay

python - 手动设置图例中点的颜色

r - 改变颜色actionButton Shiny R

android - 更改 TextView 中一个单词的文本颜色

java - 大型数据集的三重存储

java - 有谁知道 NetBeans 6.x 是否可以与 Leopard 上的 Java SE 6 一起使用?

Java:你能解释一下这个简单的语句(System.out.println)吗?

java - 使用 JTextPane 更改 setText() 方法的颜色