0

如何专门在 JavaFx 2.0 中实现某种内部框架?

我的尝试是这样的..

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    ConnectDb connection;

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

    @Override
    public void start(Stage stage) throws Exception {
        final Stage stage1 = new Stage();
        StackPane pane = new StackPane();
        Button btn = new Button("Click Me");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                connection = new ConnectDb();
                try {
                    connection.start(stage1);
                } catch (Exception e) {
                    e.printStackTrace(); 
                }
                System.out.println("Fire some thing..");
            }
        });
        pane.getChildren().add(btn);
        stage.setScene(new Scene(pane ,200, 300));
        stage.show();
    }
}

ConnectDb.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class ConnectDb extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        StackPane pane = new StackPane();
        Button btn = new Button("Click On Button which is me");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Something here..");
            }
        });
        pane.getChildren().add(btn);
        stage.setScene(new Scene(pane ,200, 300));
        stage.show();
    }
}
4

2 回答 2

1

首先,对于您的方法,您实际上不需要(因此不应该)从 Application 扩展 ConnectDb,因为您只需使用 start 方法来创建新阶段。您只需要一个应用程序类(在您的情况下为 Main)。您也可以在第一个事件处理程序中创建新的舞台/场景。

其次,JavaFX 2.1 中没有真正的 MDI 支持。现在,您可以只拥有多个阶段(相当于拥有多个窗口/框架)。但是您不能在桌面窗格中拥有类似内部框架的东西。

我想你可以采取以下措施:

  • 只需使用多个阶段(窗口),其缺点是它们会毫无灵感地漂浮在您的桌面上
  • 使用 Swing 作为容器(使用 JDesktopPane 和 JInternalFrame)并集成 JavaFX(这里有一个很好的How-To
  • 实现您自己的模拟 MDI 行为的框架
  • 查找提供 MDI 行为的框架
  • 等待 JavaFX 的未来版本,它有望提供 MDI 支持(据我所知,有一个更改请求待定......)
于 2012-07-22T15:08:48.090 回答
1
  1. 创建父 AncorPane。
  2. 向其中添加几个子 AnchorPanes。它们将用作内部框架。为这些添加不同的内容。
  3. 将子 AnchorPanes 设置为不可见。
  4. 添加按钮以隐藏、调整大小或关闭子 AnchorPanes。需要时,调用函数将所有子 AnchorPanes 设置为不可见,除了一个。
于 2013-06-05T16:41:14.880 回答