JavaFX 8隐藏侧面板和带按钮的迷你窗口

时间:2014-11-11 19:27:08

标签: javafx

晚上好。

在玩了一些Java FX 8教程并制作了一些简单的应用程序之后,我决定采用一个稍微困难的项目。

我有一个旧的Swing地图应用程序,它使用地图对象显示来自数据库的地图,图层和气象数据,并从本地地图服务器获取地图。我希望将此应用程序更新为纯Java FX 8,可能还有我最近添加到我的旧swing应用程序中的geoserver java api。

我做的第一件事是尝试在Scene Builder 2.0中为应用程序构建一个模型,以获得一般的想法。由于我是从零开始制作的,所以我希望它更现代化。

这就是问题所在。我希望将地图放在一个标签式窗格中,几乎占据整个屏幕,下面有一个显示一些数据的小面板(我还没有确定哪些旧数据实际上是有用的),还有一个顶部的菜单栏。我使用中央应用程序的边框窗格,菜单栏向北,窗格向南,选项卡位于中心。

到目前为止一切顺利。但是,我无法弄清楚如何添加一个按钮,用户可以隐藏/取消隐藏手风琴窗格和整个世界的小地图,如下图所示: enter image description here

enter image description here

enter image description here enter image description here

我认为手风琴面板实际上是在HBOX中使用地图,地图面板将Hgrow设置为Always,按钮实际上调整了手风琴面板的大小以隐藏/取消隐藏它。此外,我希望迷你地图始终位于两个窗口之上。

但是,我不知道如何把按钮放在那里。我尝试了许多不同的布局和技巧,但没有找到实际的解决方案。我找不到任何例子,不幸的是我买的两本书甚至没有超出给定的布局。有没有办法做到这一点?

此外,虽然不是优先级,但JavaFX是否能够在某个地方拖放组件(例如小地图)和锁定它?对于可能想要将小地图改为右下角的用户来说呢?

1 个答案:

答案 0 :(得分:1)

我建议使用/编写自定义Pane

将Map,SideBar,SideBar ToggleButton,Minimap ToggleButton和MiniMap添加到其子项中。并且不要忘记相应地调用toFront()toBack()以将元素放在正确的图层中。


现在有两种方法可以定位你的元素:

  1. 覆盖StackPane的layoutChildren()方法,并使用relocate(x,y)resizeRelocate(x,y,width,height)设置组件的坐标。或
  2. 将上述元素的托管属性设置为false(setManaged(false)),并将layoutXlayoutY属性绑定到所需的值。
  3. 如果你要去#1(不是真正的代码,但希望你能得到这个想法):

    • MiniMap按钮应该留在底部,以便:x = 0 | y = Pane.getHeight() - button.getHeight()
    • SideBar按钮应保留为中心:x = SideBar.getWidth() - Button.getWidth() | y = Pane.getHeight() / 2 - button.getHeight() / 2
    • 等......

    如果你要去#2(再次没有经过测试的代码):

    • MiniMap按钮:setLayoutX(0) | layoutY.bind(Pane.heightProperty())
    • SideBar按钮:layoutXProperty.bind(SideBar.widthProperty().subtract(button.widthProperty)) | `layoutYProperty.bind(Pane.heightProperty()。划分(2).subtract(button.heightProperty()。分(2)))
    • 等......

    是的,你可以用鼠标手势移动MiniMap。请查看setOnMousePressed()setOnMouseDragged()。对于第一个事件,您通常会存储当前坐标,而第二个事件会计算您调整layoutX / layoutY值的增量。


    编辑:

    你可能也看看ControlsFX,他们有一个HiddenSidesPane和一个MasterDetailPane,可能(部分)是你正在寻找的。