私は最初のプログラムをビルドしようとしていますが、私はjavaFXコントローラとメインアプリケーションクラス間の通信に問題があります。JavaFx:メインクラスにコントローラから何かをさせる方法を教えてください。
プログラムはカウントダウンです:あなたは時と分を入力し、カウントダウンが終了するとポップアップウィンドウを起動します。
はここに私のメインコントローラのbuttonClicked機能です:
@FXML
private TextField heure;
@FXML
private TextField minute;
@FXML
private Button launchButton;
private String hour,minutes;
public void launchButtonClicked(){
hour = heure.getText();
minutes = minute.getText();
try {
int h = Integer.parseInt(hour);
int m = Integer.parseInt(minutes);
System.out.println("MenuController");
} catch (NumberFormatException e) {
//Will Throw exception!
//do something! anything to handle the exception.
}
}
とここでの主なクラスです:
public class Main extends Application {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@Override
public void start(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Menu.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root,800,500);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
public void rappel(int h,int m){
System.out.println("Rappel" + h + m);
int minute = (h*60 + m) - 5;
final Runnable rappel = new Runnable(){
public void run(){
AlertBox box = new AlertBox();
box.display("Reminder","Rappel : 5 min");
}
};
final ScheduledFuture<?> rappelHandle = scheduler.schedule(rappel, minute, TimeUnit.MINUTES);
scheduler.schedule(new Runnable() {
public void run() { rappelHandle.cancel(true); }
}, 60 * 60, TimeUnit.SECONDS);
}
}
何私は、launchButtonをクリックしたときに、使用することが私の主な機能を教えているやりたいですrappel(int h、int m)は機能します。それは私が望むStringを表示するalertBoxを起動します。
コントローラを正しく使用していないような気がします。コントローラからメインのアプリケーションクラスに「注文する」方法を見つけられなかったからです。
これがどのように機能するかについてご意見はありますか?私は、スケジュールされたexececutorserviceよりもアラートボックスをポップアップする別の方法を使用する必要がありますか?
Ps:私はまだテストと例外処理を書いていないと思います。私はそれがうまく動作するように管理するときに私は約束します!
FXMLを使用してのポイントがあればどのようなものですメインクラスを使用していますか? FXMLの目的は、あなたのコントローラのロジックからグラフィックを分離することです。コントローラーを使用してください! –
"新しいMain()。rappel(int、int、)"はどうですか? – creativecreatorormaybenot
'rappel(...)'メソッドをコントローラに移動させない理由はありますか?とにかくそれはもっと自然な場所だと思われます。 –