当前位置: 首页 > 知识库问答 >
问题:

列表中带有奇怪边框的JavaFx

白星腾
2023-03-14

我有一个使用flowless项目的JavaFX列表。但是我得到了一个奇怪的边框(我没有启用任何边框,并且强制边框具有width=0px),它存在并且具有渐变效果:

当我将单元格background-inset设置为-1时,边框就没有了,所以我相信这个问题与背景有关。虽然这不是一个解决方案,因为如果我启用了边框(这是我想要的),渐变效果仍然存在。

有人知道我怎样才能摆脱这个边界吗?

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
import org.fxmisc.flowless.Cell;
import org.fxmisc.flowless.VirtualFlow;
import org.fxmisc.flowless.VirtualizedScrollPane;

public class Main extends Application {

  private ObservableList<Line> logLines;

  private VirtualFlow<Line, Cell<Line, LineCell>> listView;

  private VirtualizedScrollPane<VirtualFlow> listScrollPane;

  public static void main(String[] args) {
    launch(args);
  }

  public void start(Stage primaryStage) {

    logLines = FXCollections.observableArrayList();
    for(int i=1; i < 50; i++) {
      logLines.add(new Line("Line "+i));
    }

    listView = VirtualFlow.createVertical(logLines, (line) -> Cell.wrapNode(new LineCell(line)));
    listScrollPane = new VirtualizedScrollPane<>(listView);

    Scene scene = new Scene(listScrollPane, 200, 600, Color.BLACK);

    primaryStage.setScene(scene);
    primaryStage.show();
  }


  private class Line {

    private String text;

    public Line(String text) {
      this.text = text;
    }

    public String getText() {
      return text;
    }
  }

  private class LineCell extends TextFlow {
    public LineCell(Line line) {
      super();
      Text t = new Text(line.getText());
      t.setFill(Color.BLACK);
      super.setStyle("-fx-background-color: green;");
      super.getChildren().add(t);
    }
  }
}

谢谢!

共有1个答案

牛凌
2023-03-14

我已经找到了解决这个问题的办法。不是LineCell扩展TextFlow,而是扩展StackPane,我将TextFlow添加到StackPane。

  private class LineCell extends StackPane {
    public LineCell(Line line) {
      super();
      Text t = new Text(line.getText());
      t.setFill(Color.BLACK);

      TextFlow tf = new TextFlow(t);
      super.setStyle("-fx-background-color: green;");
      super.getChildren().add(tf);
    }
  }
 类似资料:
  • 我的屏幕底部有一个奇怪的白色边框。它在左下角,也就是TimeView.java。 这是我的ContentPane.java 这是gameview.java 这是Mainframe.java }

  • 问题内容: 我不了解python中列表的行为: 为什么一个元素的分配影响另一个元素?感谢您的回答! 问题答案: 当您将一个列表相乘时,它会复制对该列表的引用,但不会创建该列表的副本。由于列表是可变的,因此在更改列表时,所有对其引用的引用都会更改。 用ASCII术语来说: 您可以清楚地看到更改list3将同时影响两个位置。 如果要创建可变长列表而不复制引用,则应执行以下操作: 在这里,我们使用列表理

  • 问题内容: 我有一些面板内的组合框: 在我将项目更新到.NET 4之前还可以,在将项目(和AJAX)更新到.net4之后,这看起来真的很奇怪……我无法解释正确,我将显示: 我该如何解决?:)完整的CSS / ASPX页面在这里-> https://github.com/nCdy/Issues/tree/master/Ajax%20ComboBox(字符串#287) 问题答案: 我有一个类似的问题,

  • 我试图理解编译器在这里抱怨的原因: 使用编译时生成的消息 如下: cexpr_test.cpp:在函数 'int main()' 中: cexpr_test.cpp:12:76: error: 'const std::initializer_list{((const char* const*)( 令人困惑的是,为什么它会毫无问题地构造第一个初始值设定项列表。我在这里缺少什么?

  • 我使用这个类在ImageView上绘制TriangleShapeView,它在用户单击事件时改变它的颜色和可绘制的图像。 在RecyclerView onBindViewHolder方法中,我检查,然后相应地设置TriangleShapeView颜色和可绘制图像: 在setOnClickListener中: 当项目第一次加载时,这可以正常工作,但当用户单击时: -第一个 我使用下面的xml布局来扩

  • 问题内容: 在Python(2.7)中发现了从未有过的有趣的东西。 这个: 确实有效,结果是: 但 给 有人可以解释为什么吗?感谢您的回答。 问题答案: Python区分和运算符,并为它们提供了单独的挂钩。和。该类型只是为后者提供了不同的实现。 列表分别实现这些功能更为有效;必须返回一个全新的列表,而可以扩展然后返回。 在C代码中,是由所实现的,该只需调用,或者在python代码中,由。后者根据设