現在Javaを学習中であり、初めてのプログラム開発のため、知識不足や間違った発言が多々あるかもしれません。
また、tearatailへの投稿が初めてであるため、作法等誤りが見受けられるかもしれません。
何卒よろしくお願いします。
###前提・実現したいこと
JavaFXにおけるゲーム開発をしておりますが、キャラクターを仲間にするたびにキャラクターの画像やステータスなどをキャラクター表示画面に順次追加していく(キャラクターの数は不定)といった画面表示を実現したいと考えています。
現状、FXMLによる描画処理を実行しようとしておりますが、仲間に加えた判定フラグをFXML側へ送る方法や、それによって特定のフォーマットをFXML側で複製し、各能力値をLabelで表示する方法が不明です。フラグ判定、複製さえ出来れば内部のラベルへキャラクターの能力値をLabel(String "<能力値の値>")等の方法で受渡して描画しようと考えています。
###発生している問題・エラーメッセージ
特にエラー等は発生していません。
###試したこと
FXMLLoaderでFXMLを使った初期画面を読み込んだ後、下記のコードを実行して画面を再描画しようとしてもVBoxやその子要素を描画することが出来ませんでした。
###該当のソースコード
public class HelloWorld02 extends Application { private static HelloWorld02 instance; private static Scene move = null; private static int WINDOW_WIDTH = 640; private static int WINDOW_HEIGHT = 480; private Stage stage; public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) throws Exception { instance = this; this.stage=stage; stage.setWidth(WINDOW_WIDTH); stage.setHeight(WINDOW_HEIGHT); sendHelloController(""); stage.show(); } public static Scene initMove(Stage stage){ Group root = new Group(); move = new Scene (root, WINDOW_WIDTH, WINDOW_HEIGHT); Label label1 = new Label("test"); Button btn1 = new Button("btn"); VBox vb = new VBox(); vb.getChildren().add(label1); vb.getChildren().add(btn1); root.getChildren().add(vb); return move; } public void sendMoveController(String labelText) { stage.setTitle("Status"); MoveController controller = new MoveController(stage); this.replaceSceneContent(controller); } public void sendHelloController(String labelText) { stage.setTitle("Hello"); HelloController controller = new HelloController(labelText); this.replaceSceneContent(controller); } private void replaceSceneContent(Parent controller) { Scene scene = stage.getScene(); if (scene == null) { scene = new Scene(controller); stage.setScene(scene); } else { stage.getScene().setRoot(controller); } } public static HelloWorld02 getInstance() { return instance; } } public class MoveController extends AnchorPane implements Initializable{ @FXML private Button NextButton; @FXML private Button loadButton; private final String labelText=""; @FXML private Label label; public MoveController(Stage stage) { Scene move = HelloWorld02.initMove(stage); initFirst(stage); stage.setScene(move); stage.show(); } @FXML public void onNextButtonClicked() { HelloWorld02.getInstance().sendHelloController("ステータス"); } /* * ラベルやテキストが増えるごとにここで初期値を設定する。 * e.g. label.setText(String); * text.setText(String); */ /** * 1枚目のSceneを定義 * @param stage */ private void initFirst(Stage stage) { Group root = new Group(); Label label1 = new Label("push"); Button btn1 = new Button("push"); VBox vb = new VBox(); vb.getChildren().add(label1); vb.getChildren().add(btn1); root.getChildren().add(vb); } @Override public void initialize(URL url, ResourceBundle rb) { } } ●以下追記● public class HelloController extends AnchorPane implements Initializable{ @FXML private Button helloButton; @FXML private Label helloLabel; private int cnt; /** ラベルに表示するテキスト */ private final String labelText; public HelloController(String labelText) { this.labelText = labelText; loadFXML(); } /** * FXMLのロード */ private void loadFXML() { FXMLLoader fxmlLoader = new FXMLLoader(HelloWorld02.class.getResource("hello.fxml")); fxmlLoader.setRoot(this); // 自分自身をコントロールとして設定 fxmlLoader.setController(this); try { fxmlLoader.load(); } catch (IOException exception) { throw new RuntimeException(exception); } } @FXML public void onHelloButtonClicked() { HelloWorld02.getInstance().sendMoveController("進む"); } @Override public void initialize(URL url, ResourceBundle rb) { // label.setText(labelText); } } ●●●●●●●●hello.fxml●●●●●●●●●●●●● <fx:root prefHeight="480.0" prefWidth="640.0" type="javafx.scene.layout.AnchorPane" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1"> <children> <Button fx:id="NextButton" layoutX="166.0" layoutY="407.0" mnemonicParsing="false" onAction="#onHelloButtonClicked" prefHeight="28.0" prefWidth="307.0" text="進む" /> </children> </fx:root>
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
Java8u45
Eclipse(4.6.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/06 12:23 編集
2016/08/06 12:33