gpt4 book ai didi

JavaFX - 添加一个 ScrollPane 弹出窗口,当用户点击它时关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:43 25 4
gpt4 key购买 nike

我的标题写得不好,因为我的问题很难描述,所以我画了一张图:

enter image description here

我有一个 ImageView 对象,它表示一堆纸牌(不是扑克牌,只是用作示例)。单击此 ImageView 时,我需要一个弹出窗口,该窗口具有一个 ScrollPane 并向它们显示链接列表中的所有卡片对象。当用户单击窗口外的任意位置(以及随后单击鼠标右键)时,滚动 Pane 窗口需要关闭。

我已经尝试过的方法:

  • 带有 APPLICATION_MODAL 的场景。然后是 Scene.showAndWait()。我不喜欢这种方法,因为它在用户的任务栏上创建了另一个应用程序。它也让人觉得笨拙而且很糟糕。

  • 将我的根 Pane 更改为 StackPane,然后在用户单击面板时将此 Scrollpane 添加到堆栈 Pane 。由于某种原因,这真的很慢,而且看起来真的很突兀。这也很烦人,因为我的备用类需要访问根 Pane (因为当它关闭时,它需要转到根 StackPane 并自行调用 .remove())。

有没有其他更好的方法来实现这一点?我的应用程序将有很多这样的堆,因此这个框架需要很好地工作。

最佳答案

我仍然建议打开一个新的 Stage 并有一些限制来解决您使用这种方法的问题。

您可以使用 initOwner Stage 的属性让另一个 Stage 作为所有者,因此任务栏上不会出现其他图标。

您可以使用 initStyle属性(property) TRANSPARENTUNDECORATED StageSTLye,这将确保只有内容可见。

最后你可以使用 focusedProperty检查 Stage 是否失去焦点以关闭它。

示例

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);

Button b = new Button("Open deck");
b.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
Stage popupStage = new Stage();

popupStage.initOwner(primaryStage);
popupStage.initStyle(StageStyle.UNDECORATED);
Scene sc = new Scene(new ScrollPane(), 300, 300);
popupStage.setScene(sc);

popupStage.focusedProperty().addListener(new ChangeListener<Boolean>() {

@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue,
Boolean newValue) {
if(!newValue)
popupStage.close();

}
});

popupStage.show();

}
});

root.setCenter(b);


primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

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

当然也可以不在新的Stage中打开,而是在当前的Stage中画一个ScrollPane重叠 Stage 的内容,例如使用 AnchorPaneGroup作为 root,但第一个解决方案的优点是您不受限于主 Stage 的尺寸(弹出窗口可以具有您想要的任何大小)。

关于JavaFX - 添加一个 ScrollPane 弹出窗口,当用户点击它时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com