Подскажите, пожалуйста, как правильно написать взаимодействие между двумя контроллерами.
У меня есть примитивный файловый менеджер, в котором есть два метода: mkdir, touch (создание папки / файла).
В основном окне есть соответственно 2 кнопки. При нажатии должно выскакивать новое простое окно с полем ввода, двумя кнопками "ok", "cancel".
Как правильно получить текст из поля ввода вылезающего окна основным контроллером?
Мой класс Controller
@FXML
Button mkdir;
@FXML
Button touch;
private void setActions() {
SubController subController = new SubController();
subController.start();
mkdir.setOnAction(click -> {
subController.show();
dos.write(("mkdir " + "здесь должен быть текст, полученный из SubController").getBytes());
});
touch.setOnAction(click -> {
subController.show();
dos.write(("touch " + "здесь должен быть текст, полученный из SubController").getBytes());
});
}
Мой класс SubController
private static Stage myStage;
private String text;
@FXML
Button subOk;
@FXML
Button subCancel;
@FXML
TextField subName;
public void start() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getClassLoader().getResource("SubWindow.fxml"));
loader.setController(new SubController());
VBox vBox = loader.load();
myStage = new Stage();
myStage.setTitle("Enter your text here");
myStage.setScene(new Scene(vBox, 250, 50));
} catch (IOException e) {
e.printStackTrace();
}
}
public void initialize() {
subOk.setOnAction(click -> {
text = subName.getText();
subName.clear();
});
subCancel.setOnAction(click -> {
subName.clear();
myStage.hide();
});
}
public void show() {
myStage.show();
}
public void hide() {
myStage.hide();
}
public String getText() {
return text;
}
Выглядит это примерно так:
Если вам нужно простое окно с полем ввода, то воспользуйтесь тогда TextInputDialog. Ваш код тогда будет выглядеть примерно так:
mkdir.setOnAction(click -> {
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle("Some title");
textInputDialog.getDialogPane().setHeader(null);
dialog.setContentText("Enter your text here:");
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
dos.write(("mkdir " + result.get());
}
});
P.S. вот тут можете посмотреть еще примеры различные с диалогами
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я столкнулся с тем, что не понимаю, как обычно реализуется фронт для Java-приложенияУ меня есть несколько предположений о том, как это может...
Создаю программу гитарных аккордов в SwingВ программе реализовал картинку "гитарный гриф" на JLabel следующим образом: