【问题标题】:How can I alternate the row color in an already created JTable?如何在已创建的 JTable 中交替行颜色?
【发布时间】:2015-08-28 16:39:06
【问题描述】:

我知道如何用这段代码改变行颜色:

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

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

我该怎么做?

【问题讨论】:

标签: java swing colors jtable


【解决方案1】:

让您的 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();
}

【讨论】:

  • @durron597 加一,但使用/通过覆盖 isSelected 和 hasFocus 将是完美的:-),通知不需要完整的课程,这不是一个好主意,
猜你喜欢
  • 2022-10-05
  • 2011-02-03
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2013-07-30
  • 1970-01-01
  • 2020-11-29
相关资源
最近更新 更多