JavaFX中TextFieldTableCell的顏色問題

在做大作業的過程中用了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;
        }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章