javafx是否支持MDI(多文档界面)?

时间:2015-04-06 20:42:37

标签: javafx javafx-2 javafx-8

我正在设计程序,我需要使用MDI(多文档界面),我不知道该怎么做,所以请任何人都能回答我。 YouTube上有视频在javafx上进行MDI,但视频链接没有源代码或视频说明:https://www.youtube.com/watch?v=0nskbRY-Tnw。 请帮助我这是javafx的耻辱,不允许我们管理其他窗口内的窗口。

5 个答案:

答案 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的方法