这是我的需要:
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);
}
我知道这是不可能的。但这是我的要求。 如果有人知道正确的接近方式或替代解决方案,请尽快回复我。
答案 0 :(得分: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);
}
}
但是在这里,您可以将condition
定义为boolean
而不是String
。
答案 1 :(得分:0)
您可以创建一个方法,并将其放在CellColorChanger
class:
private boolean checkCondition(){
return /* whatever condition like: */ (row == 2 && column == 2) || (row == 6 && column == 1) || (row == 1 && column == 2) || (row == 4 && column == 1);
}
只要您希望重新评估条件,就可以在传递的CellColorChanger
对象上调用此函数。
答案 2 :(得分: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);
}
答案 3 :(得分: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
}
};