晚上好。
在玩了一些Java FX 8教程并制作了一些简单的应用程序之后,我决定采用一个稍微困难的项目。
我有一个旧的Swing地图应用程序,它使用地图对象显示来自数据库的地图,图层和气象数据,并从本地地图服务器获取地图。我希望将此应用程序更新为纯Java FX 8,可能还有我最近添加到我的旧swing应用程序中的geoserver java api。
我做的第一件事是尝试在Scene Builder 2.0中为应用程序构建一个模型,以获得一般的想法。由于我是从零开始制作的,所以我希望它更现代化。
这就是问题所在。我希望将地图放在一个标签式窗格中,几乎占据整个屏幕,下面有一个显示一些数据的小面板(我还没有确定哪些旧数据实际上是有用的),还有一个顶部的菜单栏。我使用中央应用程序的边框窗格,菜单栏向北,窗格向南,选项卡位于中心。
到目前为止一切顺利。但是,我无法弄清楚如何添加一个按钮,用户可以隐藏/取消隐藏手风琴窗格和整个世界的小地图,如下图所示:
我认为手风琴面板实际上是在HBOX中使用地图,地图面板将Hgrow设置为Always,按钮实际上调整了手风琴面板的大小以隐藏/取消隐藏它。此外,我希望迷你地图始终位于两个窗口之上。
但是,我不知道如何把按钮放在那里。我尝试了许多不同的布局和技巧,但没有找到实际的解决方案。我找不到任何例子,不幸的是我买的两本书甚至没有超出给定的布局。有没有办法做到这一点?
此外,虽然不是优先级,但JavaFX是否能够在某个地方拖放组件(例如小地图)和锁定它?对于可能想要将小地图改为右下角的用户来说呢?
答案 0 :(得分:1)
我建议使用/编写自定义Pane。
将Map,SideBar,SideBar ToggleButton,Minimap ToggleButton和MiniMap添加到其子项中。并且不要忘记相应地调用toFront()
和toBack()
以将元素放在正确的图层中。
现在有两种方法可以定位你的元素:
layoutChildren()
方法,并使用relocate(x,y)
或resizeRelocate(x,y,width,height)
设置组件的坐标。或setManaged(false)
),并将layoutX
和layoutY
属性绑定到所需的值。如果你要去#1(不是真正的代码,但希望你能得到这个想法):
x = 0
| y = Pane.getHeight() - button.getHeight()
x = SideBar.getWidth() - Button.getWidth()
| y = Pane.getHeight() / 2 - button.getHeight() / 2
如果你要去#2(再次没有经过测试的代码):
setLayoutX(0)
| layoutY.bind(Pane.heightProperty())
layoutXProperty.bind(SideBar.widthProperty().subtract(button.widthProperty))
| `layoutYProperty.bind(Pane.heightProperty()。划分(2).subtract(button.heightProperty()。分(2)))是的,你可以用鼠标手势移动MiniMap。请查看setOnMousePressed()和setOnMouseDragged()。对于第一个事件,您通常会存储当前坐标,而第二个事件会计算您调整layoutX / layoutY值的增量。
编辑:
你可能也看看ControlsFX,他们有一个HiddenSidesPane和一个MasterDetailPane,可能(部分)是你正在寻找的。 p>