私の問題は:.fxmlから何かを変更したいですが、私が何をしても変更はありません。これは単なる例に過ぎません。別のクラスのFXMLコンポーネントを変更/更新します
私は全体のインターネットに行きましたが、解決策のどれも私のために働いていませんでした。 ここでは、メインクラスから対応するメソッドを呼び出すことによって、ラベルのテキストを変更したいと考えています。
ボタンをクリックしたときに同じメソッド(ここではsetLabel()
)を呼び出すと、コントローラクラス内のイベントハンドラで、すべて正常に動作しますが、まもなく別のクラスから何かを修正しようとすると何も動作しません。
メインクラス:
package sample;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
Controller controller = new Controller();
Platform.runLater(()->controller.setLabel());
}
FXMLコード:
<BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<center>
<Label fx:id="label" text="This" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
コントローラクラス: パッケージサンプル。
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class Controller {
@FXML
private Label label=new Label();
public void setLabel(){
label.setText("Test");
}
}
私の "本当の"プロジェクトでは、私はsetterメソッドを呼び出すことができません。私はいつも私にヌルポインタの実行を与えます。私はコントローラが初期化されていないようだ... = loader.getController(); –
どのようにローダオブジェクトを取得していますか?親切にコードスニペットを投稿してください。 –
私はもう一度あなたに感謝し、私は数日間、この問題で立ち往生して、今ではすべてが動作しますが、少し早すぎるメソッドを呼び出し –