在做大作業的過程中用了javafx,然後想實現類似股票的顏色列表,一個tableview,如果股票漲了就用紅色,跌了就用綠色。
一開始一直以爲是TableCell已經被TextField重寫,所以產生了奇怪的bug
結果寫了很久找了很多辦法但是都有異常,最後請教大神才知道是一行中格式有double和string兩種,所以Item要用Object這個類就好了
最後附上重寫的TableCell
private class TaskCellFactory implements Callback<TableColumn<Task, Object>, TableCell<Task, Object>> {
@Override
public TableCell<Task, Object> call(TableColumn<Task, Object> param) {
TextFieldTableCell<Task, Object> cell = new TextFieldTableCell<Task, Object>() {
ObservableValue ov;
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (!isEmpty()) {
double up = Double.valueOf(this.getTableView().getColumns().get(3).getCellData(getIndex()).toString());
if (up < 0) {
this.setTextFill(Color.GREEN);
}
else if (up > 0) {
this.setTextFill(Color.RED);
}else
this.setTextFill(Color.WHITE);
setText(item.toString());
}
}
};
cell.setOnMouseClicked((MouseEvent t) -> {
if (t.getClickCount() == 2) {
try {
int index = secondTable.getFocusModel().getFocusedIndex();
String id = ((DSecond) secondTable.getItems().get(index)).getIdnumber();
main.CFIRST.setCollectionID(id);
swiftController(id, new TimeFilter(timeHelper.getStart(), timeHelper.getEnd()));
} catch (IOException e) {
e.printStackTrace();
}
}
if (t.getClickCount() == 1) {
int index = secondTable.getFocusModel().getFocusedIndex();
String id = ((DSecond) secondTable.getItems().get(index)).getIdnumber();
main.CFIRST.setCollectionID(id);
try {
setGraph(id, new TimeFilter(timeHelper.getStart(), timeHelper.getEnd()));
} catch (IOException e) {
e.printStackTrace();
}
}
});
//cell.setContextMenu(taskContextMenu);
return cell;
}
}