JavaFXで画面を水平・垂直分割する方法について記載します。
目次
画面を水平・垂直分割する方法
画面を水平・垂直分割するには、SplitPaneクラスを使用します。
1. 画面を水平分割する
次の例では、SplitPaneに2つのテキストエリアを追加しています。
SplitPaneクラスのsetOrientationメソッドでOrientation.HORIZONTALを指定すると水平分割になります。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import javafx.application.Application; import javafx.geometry.Orientation; import javafx.scene.Scene; import javafx.scene.control.SplitPane; import javafx.scene.control.TextArea; import javafx.stage.Stage; public class Main extends Application { /* SplitPaneオブジェクトを作成 */ SplitPane splitPane= new SplitPane(); /* SplitPaneに表示するオブジェクトを作成 */ TextArea leftText = new TextArea("左のテキストエリア"); TextArea rightText = new TextArea("右のテキストエリア"); @Override public void start(Stage pStage) throws Exception { /* 作成した各オブジェクトをSplitPaneに追加 */ splitPane.setPrefWidth(600); splitPane.setDividerPositions(0.5f); // 分割位置 splitPane.setOrientation(Orientation.HORIZONTAL); // 分割方法(デフォルトは HORIZONTAL) splitPane.getItems().addAll( leftText, rightText ); /* 配置 */ pStage.setTitle("SplitPane"); pStage.setWidth(600); pStage.setHeight(400); pStage.setScene(new Scene(splitPane)); pStage.show(); } public static void main(String[] args){ Application.launch(args); } } |
2. 画面を垂直分割する
次の例では、画面を垂直分割します。
SplitPaneクラスのsetOrientationメソッドでOrientation.VERTICALを指定すると垂直分割になります。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import javafx.application.Application; import javafx.geometry.Orientation; import javafx.scene.Scene; import javafx.scene.control.SplitPane; import javafx.scene.control.TextArea; import javafx.stage.Stage; public class Main extends Application { /* SplitPaneオブジェクトを作成 */ SplitPane splitPane= new SplitPane(); /* SplitPaneに表示するオブジェクトを作成 */ TextArea topText = new TextArea("上のテキストエリア"); TextArea bottomText = new TextArea("下のテキストエリア"); @Override public void start(Stage pStage) throws Exception { /* 作成した各オブジェクトをSplitPaneに追加 */ splitPane.setPrefWidth(600); splitPane.setDividerPositions(0.5f); // 左右の分割位置 splitPane.setOrientation(Orientation.VERTICAL); // 分割方法(デフォルトは HORIZONTAL) splitPane.getItems().addAll( topText, bottomText ); /* 配置 */ pStage.setTitle("SplitPane"); pStage.setWidth(600); pStage.setHeight(400); pStage.setScene(new Scene(splitPane)); pStage.show(); } public static void main(String[] args){ Application.launch(args); } } |
3. 画面を2画面以上に分割する
画面を2画面以上に分割するには、特別な操作は必要なくSplitPaneのaddAllメソッドで、追加したオブジェクト分の画面に分割されます。
次の例では、水平に3画面に分割されます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import javafx.application.Application; import javafx.geometry.Orientation; import javafx.scene.Scene; import javafx.scene.control.SplitPane; import javafx.scene.control.TextArea; import javafx.stage.Stage; public class Main extends Application { /* SplitPaneオブジェクトを作成 */ SplitPane splitPane= new SplitPane(); /* SplitPaneに表示するオブジェクトを作成 */ TextArea leftText = new TextArea("左のテキストエリア"); TextArea centerText = new TextArea("中央のテキストエリア"); TextArea rightText = new TextArea("右のテキストエリア"); @Override public void start(Stage pStage) throws Exception { /* 作成した各オブジェクトをSplitPaneに追加 */ splitPane.setPrefWidth(600); splitPane.getItems().addAll( leftText, centerText, rightText ); splitPane.setOrientation(Orientation.HORIZONTAL); // 分割方法(デフォルトは HORIZONTAL) splitPane.setDividerPositions(0.3f, 0.6f, 0.9f); /* 配置 */ pStage.setTitle("SplitPane"); pStage.setWidth(600); pStage.setHeight(400); pStage.setScene(new Scene(splitPane)); pStage.show(); } public static void main(String[] args){ Application.launch(args); } } |
4. ハイパーリンクとWebViewを使用する
次の例では、左の画面にハイパーリンク、右の画面にWebViewを実装しています。
リンクがクリックされると、WebViewにリンクに対応したサイトが表示されます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.geometry.Orientation; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Hyperlink; import javafx.scene.control.SplitPane; import javafx.scene.layout.VBox; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class Main extends Application { /* --- WebView ------------------- */ final WebView webview = new WebView(); final WebEngine webEngine = webview.getEngine(); @Override public void start(Stage pStage) throws Exception { /* --- HyperLink ------------------- */ Hyperlink hlApple = new Hyperlink("Apple"); hlApple.setOnAction((ActionEvent e) -> { webEngine.load("https://www.apple.com/jp/"); }); // Hyperlink(Google) Hyperlink hlGoogle = new Hyperlink("Google"); hlGoogle.setOnAction((ActionEvent e) -> { webEngine.load("https://www.google.com/"); }); // Hyperlinkを横に並べる VBox vbox = new VBox(); vbox.setAlignment(Pos.TOP_LEFT); vbox.getChildren().addAll(hlApple, hlGoogle); /* 作成した各オブジェクトをSplitPaneに追加 */ SplitPane splitPane= new SplitPane(); splitPane.getItems().addAll( vbox, webview ); splitPane.setDividerPositions(0.2f); // 分割位置 splitPane.setOrientation(Orientation.HORIZONTAL); // 分割方法(デフォルトは HORIZONTAL) /* 配置 */ pStage.setTitle("SplitPane"); pStage.setWidth(900); pStage.setHeight(500); pStage.setScene(new Scene(splitPane)); pStage.show(); } public static void main(String[] args){ Application.launch(args); } } |