我正在设计程序,我需要使用MDI(多文档界面),我不知道该怎么做,所以请任何人都能回答我。 YouTube上有视频在javafx上进行MDI,但视频链接没有源代码或视频说明:https://www.youtube.com/watch?v=0nskbRY-Tnw。 请帮助我这是javafx的耻辱,不允许我们管理其他窗口内的窗口。
答案 0 :(得分:4)
MDI在很大程度上被认为是poor user experience,部分原因是当前版本的JavaFX中没有内置的MDI API。
但是,如果你真的想要实现这样的应用程序,那就太难了。使用普通Pane
来保存各个窗口,并使用BorderPane
实现窗口,顶部区域包含标题栏和一些按钮。您需要做一些工作来实现拖动和聚焦的鼠标侦听器,但不要太多。
答案 1 :(得分:2)
我在10分钟内创建了一个MDI接口,使用JavaFX作为核心,使用Swing作为内部帧。如果你想这样,你必须处理:
答案 2 :(得分:0)
SIB Visions的JVx似乎可以为JavaFX提供一些MDI支持:http://blog.sibvisions.com/2015/03/19/javafx-styled-stage-and-mdi-system/
那就是说,请注意我目前正在研究Docking Framework for JavaFX,您可能会对此感兴趣,作为MDI方法的替代方案。
注释目前仅在Drombler FX个应用程序中可用,但编程方法也适用于非OSGi环境(请参阅sample)。
请注意,基于Drombler FX的应用程序有一个Getting Started页面,支持Docking Framework注释。
答案 3 :(得分:0)
使用JavaFX并不是很难实现 - 但我同意它太糟糕了,它不是原生的。虽然我对这个想法并不陌生,但是它存在一些用例。
您是否在主窗口中使用窗格作为窗口打开的位置。然后您可以使用包含滚动窗格的CustomPane。然后你可以将FXML加载到这个对象中......
private void dragPaneToNewLocation(MouseEvent event) {
// Get the exact moved X and Y
double offsetX = event.getSceneX() - mousex;
double offsetY = event.getSceneY() - mousey;
x += offsetX;
y += offsetY;
double scaledX = x;
double scaledY = y;
if(scaledY > 0){
setLayoutY(scaledY);
}
if(scaledX > 0){
setLayoutX(scaledX);
}
// again set current Mouse x AND y position
mousex = event.getSceneX();
mousey = event.getSceneY();
}
...
然后你需要实现拖动和放大调整活动大小布局儿童......
例如:
public static void main(String[] args) {
// Create an instance of the PythonInterpreter
PythonInterpreter interp = new PythonInterpreter();
// The exec() method executes strings of code
interp.exec("import sys");
interp.exec("print sys");
interp.execfile("C:/Users/A/workspace/LeaerningPyDev/helloWorld.py");
}
答案 4 :(得分:-1)
我找到了一种只使用jfxtra库
进行MDI APP的方法