imagen font componentes color boton java javafx controller label fxml

font - javafx label background color



Java FX cambia el texto de la etiqueta en una escena de la escena anterior (1)

FXMLLoader myLoader = new FXMLLoader(getClass().getResource("Main.fxml")); MainController mainController = myLoader.getController(); mainController.setConnectedTokenLabel(context.getConnectedName());

Sin llamar al método de load de FXMLLoader , no se crea ninguna instancia de controlador, incluso si el atributo fx:controller se especifica en el archivo fxml.

Sin embargo, la load llamadas antes de getController no ayudará, ya que el fxml simplemente se carga de nuevo con una instancia de controlador diferente.

MainController "decirle" al ConnectController sobre el MainController que se creó. (ver Pasando Parámetros JavaFX FXML )

Una forma sería agregar este código a la clase ConnectController

private MainController mainController; public void setMainController(MainController mainController) { this.mainController = mainController; }

y use este campo en lugar de la variable local en el método connectToken_onMouseClicked() .

Para llamar al colocador, acceda al controlador después de cargar la vista en connectTokenButton_onMouseClicked() :

FXMLLoader loader = new FXMLLoader(getClass().getResource("ConnectView.fxml")); AnchorPane page = loader.load(); loader.<ConnectController>getController().setMainController(this);

Tengo una clase Main inicia mi aplicación que tiene su clase MainController especificada en fxml. Al hacer clic en el botón Connect se abren otras ventanas con diferente escena y controlador. Basado en la acción, me gustaría cambiar el valor del texto de la Label través de mi MainController , pero no funciona como se esperaba. Vea los detalles abajo.

Básicamente, me gustaría actualizar el texto en connectedLabel en la clase MainController clase ConnectController y no funciona.

Main.java :

public class Main extends Application { private static final Logger logger = Logger.getLogger(Main.class.getName()); @Override public void start(Stage primaryStage) { try { logger.info("Application is starting"); AnchorPane page = FXMLLoader.load(getClass().getResource("Main.fxml")); //BorderPane root = new BorderPane(); //Scene scene = new Scene(root,400,400); Scene scene = new Scene(page); scene.getStylesheets().add(getClass().getResource("Main.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.setResizable(false); primaryStage.show(); } catch(Exception e) { logger.warning(e.getMessage()); } } public static void main(String[] args) { launch(args); } }

MainController.java :

public class MainController implements Initializable { private Context context = null; @FXML Label connectedLabel; @FXML Button connectButton; @Override public void initialize(URL location, ResourceBundle resources) { context = Context.getInstance(); } public void setConnectedLabel(String name) { connectedLabel.setText(name); connectButton.setText("Disconnect"); } @FXML public void connectTokenButton_onMouseClicked() { try { if (connectTokenButton.getText().equals("Disconnect")) { boolean disconnected = context.getToken().disconnectToken(); if (disconnected) { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Disconnected"); alert.setHeaderText(null); alert.setContentText("Succcessfully disconnected!"); alert.showAndWait(); connectedTokenLabel.setText("N/A"); connectTokenButton.setText("Connect"); } } else { AnchorPane page = FXMLLoader.load(getClass().getResource("ConnectView.fxml")); Stage stage = new Stage(); Scene scene = new Scene(page); scene.getStylesheets().add(getClass().getResource("ConnectView.css").toExternalForm()); stage.setScene(scene); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); stage.initOwner(connectedLabel.getScene().getWindow()); stage.show(); //Stage thisStage = (Stage) connectedTokenLabel.getScene().getWindow(); //thisStage.close(); } } catch (Exception e) { System.out.println(e); } } }

ConnectController.java :

public class ConnectController implements Initializable { private Context context = null; @FXML ComboBox<String> selectComboBox; @FXML PasswordField userPinPasswordField; @FXML Button cancelButton; @Override public void initialize(URL location, ResourceBundle resources) { context = Context.getInstance(); } public void setMainC(Stage stage) { mainStage = stage; } @FXML private void connectToken_onMouseClicked() { String pin = userPinPasswordField.getText(); boolean connected = context.connect(selectComboBox.getValue(), pin); if (connected) { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Connected"); alert.setHeaderText(null); alert.setContentText("Succcessfully connected!"); alert.showAndWait(); FXMLLoader myLoader = new FXMLLoader(getClass().getResource("Main.fxml")); MainController mainController = myLoader.getController(); mainController.setConnectedTokenLabel(context.getConnectedName()); Stage thisStage = (Stage) selectComboBox.getScene().getWindow(); thisStage.close(); } } }

¿Qué estoy haciendo mal al llamar setConnectedLabel método setConnectedLabel desde un controlador diferente?