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
  1. 親の AncorPane を作成します。
  2. それにいくつかの子 AnchorPanes を追加します。それらは内部フレームとして機能します。これらに別のコンテンツを追加します。
  3. 子 AnchorPanes を非表示に設定します。
  4. 子 AnchorPanes を非表示、サイズ変更、または閉じるボタンを追加します。必要に応じて、関数を呼び出して、1 つを除いてすべての子 AnchorPanes を非表示に設定します。
于 2013-06-05T16:41:14.880 に答える
1

まず第一に、あなたのアプローチでは、新しいステージを作成するために start メソッドを使用するだけなので、アプリケーションから ConnectDb を拡張する必要はありません (したがって拡張すべきではありません)。Application クラスが 1 つだけ必要です (この場合は Main)。最初のイベント ハンドラーで新しいステージ/シーンを作成することもできます。

次に、JavaFX 2.1 には実際の MDI サポートがありません。現在、複数のステージを持つことができます (これは、複数のウィンドウ/フレームを持つことと同じです)。ただし、デスクトップ ペインに内部フレームのようなものを配置することはできません。

次のような行動を取ることができると思います。

  • 複数のステージ (ウィンドウ) を使用するだけで、デスクトップ上でまったく刺激を受けないという欠点があります。
  • Swing をコンテナーとして (JDesktopPane および JInternalFrame を使用して) 使用し、JavaFX を統合します (素晴らしいハウツーがあります) 。
  • MDI の動作をエミュレートする独自のフレームワークを実装する
  • MDI 動作を提供するフレームワークを見つける
  • うまくいけばMDIサポートを提供するJavaFXの将来のリリースを待ちます(私の知る限り、保留中の変更要求があります...)
于 2012-07-22T15:08:48.090 に答える