如何使外部窗格滚动而不是内部窗格
How to make outer pane scroll instead of inner one
首先,正如您可能在标签中注意到的那样,我使用 RichTextFX。 CodeArea只是它的文本区,有一些特点。
我有 ScrollPane
个内部元素:
ScrollPane
| AnchorPane
| | VBox
| | | HBox
| | | | Label
| | | | CodeArea
| | | HBox
| | | | Label
| | | | CodeArea
| | | HBox
| | | | Label
| | | | CodeArea
...........................
当我在光标未悬停时尝试滚动时 CodeArea
,ScrollPane
滚动就像它应该做的那样。
但是如果我的光标在 CodeArea
上,正如我假设的那样,它会尝试滚动 CodeArea
,即使没有任何内容可以滚动(内容很合适)。
ScrollEvent
未在 ScrollPane
、AnchorPane
或 CodeArea
上调用,但 VBox
.
我尝试绑定 scrollPane.onScrollProperty().bind(vBox.onScrollProperty())
或 scrollPane.onScrollProperty().bind(codeArea.onScrollProperty())
等属性,但没有成功。
本题不影响经典TextArea
。
如何在悬停 CodeArea
时让 ScrollPane
滚动而不是 CodeArea
?
您也可以使用此示例重现问题:
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();
}
}
在你的例子中做:
codeArea.addEventFilter( ScrollEvent.ANY, scroll ->
{
vBox.fireEvent( scroll );
scroll.consume();
});
首先,正如您可能在标签中注意到的那样,我使用 RichTextFX。 CodeArea只是它的文本区,有一些特点。
我有 ScrollPane
个内部元素:
ScrollPane
| AnchorPane
| | VBox
| | | HBox
| | | | Label
| | | | CodeArea
| | | HBox
| | | | Label
| | | | CodeArea
| | | HBox
| | | | Label
| | | | CodeArea
...........................
当我在光标未悬停时尝试滚动时 CodeArea
,ScrollPane
滚动就像它应该做的那样。
但是如果我的光标在 CodeArea
上,正如我假设的那样,它会尝试滚动 CodeArea
,即使没有任何内容可以滚动(内容很合适)。
ScrollEvent
未在 ScrollPane
、AnchorPane
或 CodeArea
上调用,但 VBox
.
我尝试绑定 scrollPane.onScrollProperty().bind(vBox.onScrollProperty())
或 scrollPane.onScrollProperty().bind(codeArea.onScrollProperty())
等属性,但没有成功。
本题不影响经典TextArea
。
如何在悬停 CodeArea
时让 ScrollPane
滚动而不是 CodeArea
?
您也可以使用此示例重现问题:
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();
}
}
在你的例子中做:
codeArea.addEventFilter( ScrollEvent.ANY, scroll ->
{
vBox.fireEvent( scroll );
scroll.consume();
});