質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

Q&A

解決済

1回答

4070閲覧

SceneBuilderを用いてステータスバーに区切り線を配置しようとしても配置できない。

mr0237

総合スコア164

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

0グッド

0クリップ

投稿2016/12/10 09:33

以前、質問のコメント(ステータスバー上に区切り線と画像とボタンを表示させるには?)のところで、

SceneBuilderを用いてGUI操作で作成するのが一番簡単

と指摘を受けたので、SceneBuilderでSceneBuilderで独自クラスを使うにはのページをみてcontrolsfxをSceneBuilderに登録しました。

それで、AnchorPaneを配置し、Status Barを配置したんですが、その後に区切り線を配置しようとControlsメニューからSeparator(vertical)を選んでドラッグし、Status Barに配置しようとしたら↓のようなカーソルが出て、配置できないのです。

イメージ説明

さらにHierarchyのStatus Barのところに配置しようとしても↓のようなカーソルが出て配置できないのです。

イメージ説明

SceneBuilderを用いて、Status Bar上に区切り線や画像を配置するにはどうすればいいのでしょうか?

もし、SceneBuilder上からできない場合、FXMLやJAVAでコードを書く場合、どのようにして書けばいいのでしょうか?

Javaコードは↓のようになります。

Java

1/* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6package test1; 7 8import javafx.application.Application; 9import javafx.fxml.FXMLLoader; 10import javafx.scene.Parent; 11import javafx.scene.Scene; 12import javafx.stage.Stage; 13 14public class Test1 extends Application { 15 16 @Override 17 public void start(Stage stage) throws Exception { 18 Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 19 20 Scene scene = new Scene(root); 21 22 stage.setScene(scene); 23 stage.show(); 24 } 25 26 /** 27 * @param args the command line arguments 28 */ 29 public static void main(String[] args) { 30 launch(args); 31 } 32 33} 34

↓FXMLのコードは以下のようになります。

FXML

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.control.Button?> 4<?import javafx.scene.control.Menu?> 5<?import javafx.scene.control.MenuBar?> 6<?import javafx.scene.control.MenuItem?> 7<?import javafx.scene.control.ToolBar?> 8<?import javafx.scene.layout.AnchorPane?> 9<?import javafx.scene.layout.BorderPane?> 10<?import javafx.scene.layout.ColumnConstraints?> 11<?import javafx.scene.layout.GridPane?> 12<?import javafx.scene.layout.RowConstraints?> 13<?import org.controlsfx.control.StatusBar?> 14 15 16<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1"> 17 <children> 18 <BorderPane layoutX="100.0" layoutY="72.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 19 <top> 20 <GridPane BorderPane.alignment="CENTER"> 21 <columnConstraints> 22 <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 23 </columnConstraints> 24 <rowConstraints> 25 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 26 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 27 </rowConstraints> 28 <children> 29 <MenuBar> 30 <menus> 31 <Menu mnemonicParsing="false" text="File"> 32 <items> 33 <MenuItem mnemonicParsing="false" text="Close" /> 34 </items> 35 </Menu> 36 <Menu mnemonicParsing="false" text="Edit"> 37 <items> 38 <MenuItem mnemonicParsing="false" text="Delete" /> 39 </items> 40 </Menu> 41 <Menu mnemonicParsing="false" text="Help"> 42 <items> 43 <MenuItem mnemonicParsing="false" text="About" /> 44 </items> 45 </Menu> 46 </menus> 47 </MenuBar> 48 <ToolBar prefHeight="40.0" prefWidth="200.0" GridPane.rowIndex="1"> 49 <items> 50 <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="30.0" text="Button" /> 51 </items> 52 </ToolBar> 53 </children> 54 </GridPane> 55 </top> 56 <bottom> 57 <StatusBar BorderPane.alignment="CENTER" /> 58 </bottom> 59 </BorderPane> 60 </children> 61</AnchorPane> 62

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

StatusBarはコンテナーではなくてコントロールですのでその下に任意個数のノードを直接配置することはできずgraphicプロパティーに一つだけノードを配置できます。複数配置する場合はgraphicプロパティーへコンテナーを配置しさらにその下に配置することになります。その点に注意して以下を参照ください。

SceneBuilderでGUIによって配置できるのは自分が知る限り次のようなものがあります。

  • Pane(コンテナ)のchildrenのようなNode(またはその派生)のObservableListプロパティー
  • LabelコントロールのgraphicのようなNode(またはその派生)のプロパティー

StatusBarにもObjectProperty<Node>型のgraphicプロパティーが存在するのでGUIで配置できそうな気がするのですが期待に反してできないのですね・・・推測ですがSceneBuilderがGUIでNodeを配置可能なプロパティーには何かの制約があるのかも知れません。

考えられる対処としては2つあると思います。個人的にはStatusBar#graphicプロパティーを使わずにやる方法(後に書いた方法)をお勧めします。

  • FXMLを直接記述することでStatusBarのgraphicプロパティーを設定

FXML上に直接記述する方法です。一般にあるコントロールCCCにNode(またはその派生)のプロパティーXXXがあり、そこへクラスNNNのNodeを配置する場合FXML上に次のようにかけると思います。正確な仕様はFXMLの概要をご覧ください。なお、FXMLへ直接記述するとSceneBuilderの仕様制約のため読み込めないことがあるのでそれに注意した方がいいかもしれません。(本件の程度ならそういうことはないと思いますが・・・)

FXML

1... 2 <CCC ...> 3 <XXX> 4 <NNN>...</NNN> 5 </XXX> 6 </CCC> 7...
  • SceneBuilderを使い、HBoxの下に他のNodeとStatusBarを配置

StatusBarのgraphicを使わず、HBox上にButton,Separator,StatusBarを配置するようにします。StatusBarのgraphicプロパティーを使って配置できるのはStatusBarの左側のNodeだけなので右側に何か配置する場合は必然的にこの方法を使うことになると思います。

投稿2016/12/10 14:40

編集2016/12/10 14:42
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mr0237

2016/12/18 02:18

ありがとうこざいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問