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

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

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

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

Java

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

Q&A

解決済

1回答

3088閲覧

SceneBuilderで作成したウィンドウに文などでボタンを複数個追加したい

GFC

総合スコア11

JavaFX

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

Java

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

0グッド

0クリップ

投稿2016/11/19 09:11

編集2016/11/29 09:02

###前提・実現したいこと
SceneBuilderを用いて作成した下地の画面にfor文を用いて複数個連続でボタンを作るにはどのようにしたらよいでしょうか?イメージとしてはLabel(黒線)の下の赤枠の部分にボタンを複数個配置する感じです。画面例

Window.fxml コード > ```<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <fx:root fx:id="root" prefHeight="500.0" prefWidth="600.0" style="-fx-background-color: white;" type="javafx.scene.layout.AnchorPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label fx:id="label" alignment="CENTER" layoutY="25.0" prefHeight="36.0" prefWidth="526.0" style="-fx-background-color: black;" textFill="WHITE" wrapText="true" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0"> <font> <Font name="Lucida Bright Demibold" size="23.0" /> </font> </Label> </children> </fx:root>
WindowController.java コード public class Window extends AnchorPane implements Initializable { String labelText; @FXML Label label; public Window(String labelText) { this.labelText = labelText; loadFXML(); } /** * FXMLのロード */ private void loadFXML() { FXMLLoader fxmlLoader = new FXMLLoader(.class.getResource("Window.fxml")); fxmlLoader.setRoot(this); // 自分自身をコントロールとして設定 fxmlLoader.setController(this); try { fxmlLoader.load(); } catch (IOException exception) { throw new RuntimeException(exception); } } @Override public void initialize(URL location, ResourceBundle resources) { label.setText(labelText); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

この例の画面ではFXMLでAnchorPaneとLabelを定義していますが、追加でボタンを配置すべき場所(赤枠)の領域に別のコンテナを定義しておき、それにidを付与してコントローラークラスで@FXMLタグを用いてそのコンテナーがわかるようにしておくとよいと思います。ボタンの追加はFXMLをロードした以降に次のようにして追加できます。コンテナーの種類によっては追加のしかたにバリエーションがありますのでそれぞれのコンテナーのリファレンスをご覧ください。

java

1class Window ... { 2 @FXML 3 private XXContainer buttonContainer; // ボタンを追加するための任意のコンテナーノード 4 ... 5 private void createAndAddButtons() { 6 Button button = new Button(); 7 ... 8 buttonContainer.getChildren().add(button); 9 ... 10 } 11}

投稿2016/11/19 09:53

KSwordOfHaste

総合スコア18394

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

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

GFC

2016/11/29 09:01 編集

... @FXML private AnchorPane root; @FXML private AnchorPane buttonContainer; public Window(String labelText) { this.labelText = labelText; loadFXML(); } /** * FXMLのロード */ private void loadFXML() { FXMLLoader fxmlLoader = new FXMLLoader(.class.getResource("Window.fxml")); fxmlLoader.setRoot(this); // 自分自身をコントロールとして設定 fxmlLoader.setController(this); try { fxmlLoader.load(); } catch (IOException exception) { throw new RuntimeException(exception); } } private void createAndAddButtons() { Button topButton = new Button(); topButton.setLayoutY(150); topButton.setPrefSize(70, 30); buttonContainer.getChildren().add(topButton); } ...
GFC

2016/11/19 11:51

こういうことでしょうか?
GFC

2016/11/19 12:24

コンストラクタ部分でcreateAndAddButtons呼び出してませんでした。解決できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問