-3

这是我的需要:

String condition=null;
condition="row==2&&column==2||row==6&&column==1||row==1&&column==2 
|| row==4 && column==1";
table.setDefaultRenderer(Object.class, new CellColorChanger(condition));

在我想使用的 CellColorChanger 类中,

 if (condition)
        {
            setBackground(Color.GREEN);
            setForeground(Color.RED);
        }

我知道这是不可能的。但这是我的要求。如果有人知道正确的方法或替代解决方案,请尽快回复我。

4

4 回答 4

1

这个怎么样?

  public static void main(String[] args) {
        boolean condition=false;
        int row=0;
        int column=0;
        condition=row==2&&column==2||row==6&&column==1||row==1&&column==2
                || row==4 && column==1;
        setParam(condition);
    }

    public static void setParam(boolean condition){
        if (condition)
        {
            setBackground(Color.GREEN);
            setForeground(Color.RED);
        }
    }

但在这里你可以定义conditionbooleannot String

于 2013-08-19T06:20:47.593 回答
0

你必须这样做

new CellColorChanger(row,column)

在您的 CellColorChanger 类中

     if(row==2&&column==2||row==6&&column==1||row==1&&column==2 || row==4 && column==1){

        setBackground(Color.GREEN);
        setForeground(Color.RED);
 }
于 2013-08-19T06:21:17.623 回答
0

您可以创建一个方法,并将其放在CellColorChanger类中:

private boolean checkCondition(){
  return /* whatever condition like: */ (row == 2 && column == 2) || (row == 6 && column == 1) || (row == 1 && column == 2) || (row == 4 && column == 1);
}

CellColorChanger每当您希望重新评估条件时,对传递的对象调用此函数。

于 2013-08-19T06:19:41.640 回答
0

如果您想要做某种形式的函数式编程(这在我看来更有可能),那么您可以将其实现为:

interface Condition {
    boolean isTrueFor(Map parameters);
}
public void CellColorChanger(Condition condition) {
    Map<String,String> arguments= new HashMap<String,String>() ;
    //  Populate arguments
    arguments.set("row",String.valueOf(specificRow));
    arguments.set("column",String.valueOf(specificColumn));
    if( condition.isTrueFor(arguments) ) {
        //  Whatever
    }
}
...
Condition myFirstCondition= new Condition() {
    boolean isTrueFor(Map parameters) {
        int row= Integer.paseInt( parameters.get("row") ) ;
        int column= Integer.paseInt( parameters.get("column") ) ;
        return row==2 && column==2 || row==6 && column==1 || row==1 && column==2 || row==4 && column==1
    }
};

如果您想做一些非常通用的事情,那将起作用。但是,我首选的替代方案对应的代码更简单、更清晰、更易于管理:

interface Row_Column_Condition {
    boolean isTrueFor(int row,int column);
}
public void CellColorChanger(Condition condition) {
    if( condition.isTrueFor(specificRow,specificColumn) ) {
        //  Whatever
    }
}
...
Row_Column_Condition mySecondCondition= new Row_Column_Condition() {
    boolean isTrueFor(int row,int column) {
        return row==2 && column==2 || row==6 && column==1 || row==1 && column==2 || row==4 && column==1
    }
};
于 2013-08-19T06:26:56.813 回答