JavaFX-表格列图形高于其他行

JavaFX-表格列图形高于其他行,java,javafx,graphic,tablecolumn,Java,Javafx,Graphic,Tablecolumn,我正在用JavaFX制作一张桌子。每行都有文本。一行有一个图形,因为该单元格的文本有多种颜色 该代码仅在特定条件为真时适用(该部分有效): departTimeCol.setCellFactory(列->新表单元格(){ @凌驾 受保护的void updateItem(字符串项,布尔值为空){ super.updateItem(项,空); setText(项目); 如果(项!=null&&!空){ 如果(项匹配(“^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]\

我正在用JavaFX制作一张桌子。每行都有文本。一行有一个图形,因为该单元格的文本有多种颜色

该代码仅在特定条件为真时适用(该部分有效):

departTimeCol.setCellFactory(列->新表单元格(){
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
setText(项目);
如果(项!=null&&!空){
如果(项匹配(“^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]\\s\\\+[\\d]”){
Text timeText=新文本(item.split(“”[0]。trim()+“”);
Text delayText=新文本(item.split(“”[1].trim());
delayText.setFill(颜色为红色);
TextFlow flow=新的TextFlow(timeText,delayText);
setText(空);
设定图形(流量);
}
}
}
});
结果是:


红色+2的行是图形。所有其他行都包含文本。如何使包含图形的行具有相同的高度

只需将首选高度设置为
0
,即可使高度正好满足存储文本的需要

Pattern pattern = Pattern.compile("((?:[0-9]|[01][0-9]|2[0-3]):[0-5][0-9]\\s)(\\+\\d)");

departTimeCol.setCellFactory(column -> new TableCell<Ride, String>() {

    private final Text timeText = new Text();
    private final Text delayText = new Text();
    private final TextFlow flow = new TextFlow(timeText, delayText);

    {
        delayText.setFill(Color.RED);
        flow.setPrefHeight(0);
        flow.heightProperty().addListener((observable, oldValue, newValue) -> {
            this.setMinHeight(newValue.doubleValue() + 4);
        });
        flow.setMinHeight(Region.USE_COMPUTED_SIZE);
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        setGraphic(flow);
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            timeText.setText("");
            delayText.setText("");
            delayText.setVisible(false);
        } else {
            Matcher m = pattern.matcher(item);
            if (m.matches()) {
                timeText.setText(m.group(1));
                delayText.setText(m.group(2));
                delayText.setVisible(true);
            } else {
                timeText.setText(item);
                delayText.setText("");
                delayText.setVisible(false);
            }
        }

    }
});
您还可以使用
Pattern
+
Matcher
和捕获组,在同一步骤中解析输入并匹配它。这样你也不会有上述问题


谢谢您的回答。我尝试了您的解决方案,但+2不会变为红色:/
Pattern pattern = Pattern.compile("((?:[0-9]|[01][0-9]|2[0-3]):[0-5][0-9]\\s)(\\+\\d)");

departTimeCol.setCellFactory(column -> new TableCell<Ride, String>() {

    private final Text timeText = new Text();
    private final Text delayText = new Text();
    private final TextFlow flow = new TextFlow(timeText, delayText);

    {
        delayText.setFill(Color.RED);
        flow.setPrefHeight(0);
        flow.heightProperty().addListener((observable, oldValue, newValue) -> {
            this.setMinHeight(newValue.doubleValue() + 4);
        });
        flow.setMinHeight(Region.USE_COMPUTED_SIZE);
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
        setGraphic(flow);
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (empty || item == null) {
            timeText.setText("");
            delayText.setText("");
            delayText.setVisible(false);
        } else {
            Matcher m = pattern.matcher(item);
            if (m.matches()) {
                timeText.setText(m.group(1));
                delayText.setText(m.group(2));
                delayText.setVisible(true);
            } else {
                timeText.setText(item);
                delayText.setText("");
                delayText.setVisible(false);
            }
        }

    }
});
System.out.println("a\tb".matches(".\\s."));
System.out.println("a\tb".split(" ")[1]);