0

首先,正如您可能在标签中注意到的那样,我使用 RichTextFX。CodeArea 只是它的文本区域,具有一些功能。

我有ScrollPane内部元素:

ScrollPane
|   AnchorPane
|   |   VBox
|   |   |   HBox
|   |   |   |   Label
|   |   |   |   CodeArea
|   |   |   HBox
|   |   |   |   Label
|   |   |   |   CodeArea
|   |   |   HBox
|   |   |   |   Label
|   |   |   |   CodeArea
...........................

当我在光标未悬停时尝试滚动时CodeAreaScrollPane应该像滚动一样滚动。

但是,如果我的光标在 上CodeArea,如我所料,它会尝试滚动CodeArea,即使没有可滚动的内容(内容很合适)。

ScrollEvent不是ScrollPane,AnchorPane也 不是CodeArea, 但是VBox.

我试图绑定像scrollPane.onScrollProperty().bind(vBox.onScrollProperty())orscrollPane.onScrollProperty().bind(codeArea.onScrollProperty())和许多其他的属性,但没有奏效。

这个问题不影响 classic TextArea

如何在悬停时ScrollPane滚动而不是滚动?CodeAreaCodeArea

您还可以使用此示例重现该问题:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.scene.control.ScrollPane;
import org.fxmisc.richtext.CodeArea;

public class Main extends Application {

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

    @Override
    public void start(Stage stage) {
        ScrollPane scrollPane = new ScrollPane();
        VBox vBox = new VBox();
        scrollPane.setContent(vBox);
        CodeArea codeArea = new CodeArea();
        codeArea.setPrefHeight(2000);
        Label label = new Label("Can you scroll here while hovering code area?");
        vBox.getChildren().addAll(codeArea, label);
        for (int i = 0; i < 256; i++) {
            codeArea.appendText("Sample text\n");
        }
        Scene scene = new Scene(scrollPane, 400, 400);
        stage.setScene(scene);
        stage.show();
    }
}
4

1 回答 1

0

在您的示例中,请执行以下操作:

codeArea.addEventFilter( ScrollEvent.ANY, scroll -> 
{
    vBox.fireEvent( scroll );
    scroll.consume();
});
于 2022-02-11T15:04:04.387 回答