Jacek
Kaczmarski
Uczeń szkoły
średniej
Temat: Problem z wywołaniem nowego okna [javaFX]
Witam, napisałem w java(fx) okno ( korzystam z fxml ) posiadające między innymi 2 przyciski, chce żeby po naciśnięciu jednego z nich ( "zarejestruj się"), przyciski i pola służące do logowania niejako zamieniły się z przyciskami i polami służącymi do rejestracji, pomyślałem żeby zamienić pliki fxml odpowiedzialne za wygląd okna i jego zawartość ( kontroler tego pliku też byłby inny).( staram się to też budować zgodnie z modelem MVC )
widok:
package fxmlexamplemvc;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class FXMLExampleMVC extends Application{
protected Parent root;
@Override
public void start(Stage stage) throws Exception {
gotoLogin();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("JavaFX Welcome!");
scene.getStylesheets().add(FXMLExampleMVC.class.getResource("cssforapp.css").toExternalForm());
stage.show();
}
public void gotoRegister() throws IOException{
root = FXMLLoader.load(getClass().getResource("RegisterFXML.fxml"));
}
public void gotoLogin() throws IOException{
root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
}
public static void main(String[] args) {
launch(args);
}
}
Kontroler:
package fxmlexamplemvc;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
public class SampleController {
public SampleModel model = new SampleModel();
@FXML
protected Text actiontarget;
@FXML
protected PasswordField passwordField;
@FXML
protected TextField loginField;
@FXML protected void handleSubmitButtonAction(){
if((loginField.getText().equals(model.returnLogin()))&&(passwordField.getText().equals(model.returnPass())) ){
actiontarget.setText("You have access !");
} else {
actiontarget.setText("Wrong data !");
}
}
@FXML protected void handleSubmitButtonRegister() throws IOException{
// Tu chce wywołać metodę "gotoRegister", która "zamieni" mi plik(fxml) na ten pożądany.
}
}
Jest jeszcze plik fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.text.*?>
<GridPane prefHeight="320" prefWidth="360" fx:controller="fxmlexamplemvc.SampleController"
stylesheets="fxmlexamplemvc/cssforapp.css"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding><Insets top="25" right="25" bottom="10" left="25"/></padding>
<Text text="MyWindow" fx:id="welcome"
GridPane.columnIndex="0" GridPane.rowIndex="0"
GridPane.columnSpan="2"/>
<Label text="User Name:"
GridPane.columnIndex="0" GridPane.rowIndex="1"/>
<TextField fx:id="loginField"
GridPane.columnIndex="1" GridPane.rowIndex="1"/>
<Label text="Password:"
GridPane.columnIndex="0" GridPane.rowIndex="2"/>
<PasswordField fx:id="passwordField"
GridPane.columnIndex="1" GridPane.rowIndex="2"/>
<HBox spacing="10" alignment="bottom_right"
GridPane.columnIndex="1" GridPane.rowIndex="4">
<Button text="Register now!"
onAction="#handleSubmitButtonRegister"/>
<Button text="Sign In"
onAction="#handleSubmitButtonAction"/>
</HBox>
<Text fx:id="actiontarget"
GridPane.columnIndex="1" GridPane.rowIndex="6"/>
</GridPane>
I teraz sedno problemu i pytanie, mianowicie: W jaki sposób mogę wywołać tą metodę (gotoRegister która znajduje się w widoku) w Kontrolerze ? Da się to jakoś rozwiązać czy napisać to od nowa ( chociaż też nie mam specjalnie pomysłu jak to zrobić :D ) ?
z góry dziękiJacek Kaczmarski edytował(a) ten post dnia 27.12.12 o godzinie 04:15