Я пытаюсь изменить видимость для некоторых TextFields и инициализировать новую подсказку в методе, который вызывается из другого контроллера.
Таким образом, в родительском окне у меня установлено TextField, по умолчанию не видимое, и кнопка для открытия нового дочернего окна (установлено как showAndWait).В дочернем окне у меня есть TableView, и когда в нем выбрано значение, TextField должен появиться в родительском окне с выбранным значением, заданным во всплывающей подсказке.
Так что из приведенного ниже кода я получаю только напечатанное сообщениеиз метода.Скорее всего, я ошибаюсь, но, скорее всего, я должен вызывать метод инициализации родителя при выборе значения из child.
// parent fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="javafxapplication4.JavaFXApplication4">
<children>
<TextField fx:id="textField" layoutX="208.0" layoutY="107.0" prefHeight="25.0" prefWidth="195.0" visible="false" />
<Button fx:id="toChild" layoutX="262.0" layoutY="200.0" onAction="#toChild" mnemonicParsing="false" text="Child window" />
</children>
</AnchorPane>
// parent controller
package javafxapplication4;
import java.io.IOException;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class JavaFXApplication4 extends Application {
@FXML
public TextField textField;
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("Parent.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
// called onmouseclick by child's tableview
public void execute()
{
System.out.println("Execute called... He wants his money back!");
textField.setTooltip(new Tooltip("Value selected: "));
textField.setVisible(true);
}
// button for child window
public void toChild() throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getClassLoader().getResource("javafxapplication4/Child.fxml"));
Parent parent = loader.load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setScene(new Scene(parent));
stage.showAndWait();
}
}
// дочерний fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="javafxapplication4.ChildController">
<children>
<TableView fx:id="table" layoutX="101.0" layoutY="100.0" onMouseClicked="#select" prefHeight="200.0" prefWidth="442.0">
<columns>
<TableColumn prefWidth="75.0" text="C1" />
<TableColumn prefWidth="75.0" text="C2" />
</columns>
</TableView>
</children>
</AnchorPane>
// дочерний контроллер
package javafxapplication4;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.TableView;
public class ChildController implements Initializable {
@FXML
public TableView table;
@Override
public void initialize(URL url, ResourceBundle rb) {
}
// onmouseclick method for tableview
public void select() throws IOException
{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getClassLoader().getResource("javafxapplication4/Parent.fxml"));
Parent parent = loader.load();
JavaFXApplication4 controller = loader.getController();
Class value = (Class) table.getSelectionModel().getSelectedItem();
table.setOnMouseClicked(event -> {
controller.execute();
((Node)(event.getSource())).getScene().getWindow().hide();
} );}}
Редактировать: Итак, в основном я попытался установить новую всплывающую подсказку для текстового поля вродительское окно через метод в родительском контроллере, который я вызвал из дочернего контроллера.Я также попытался с помощью controller.textField.setTooltip (new Tooltip ("...")) в дочернем контроллере, но безуспешно.Я думаю, я должен перезагрузить родительское окно после изменений, но я понятия не имею, как.(проблема с настройкой видимости, я думаю, из той же проблемы)
Спасибо.