@Neonoviiwolf
Flutter developer

Как добавить кнопку кодом в javaFX?

Доброго
Не могу решить проблему, в javaFX сделал на fxml макет (накидал кнопки и т.п.) вот теперь нужно с помощью кода создавать другие объекты (создаются во время выполнения программы) и как оказалось, если я использовал fxml, то у Parent root нету больше root.getChildren().add. Выходит, либо всё кодом писать, либо всё через fxml - чёт крайне неудобно, как решить проблему?
Ошибка:Error:(50, 13) java: getChildren() has protected access in javafx.scene.Parent
public class Main extends Application {


    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();

        Button btn = new Button();
        btn.setText("tttt");
        root.getChildren().add(btn); //getChildren - подчёркивается красным и при компиляции выдаёт ошибку

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0"
      prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.91" >
    <children>
    </children>
</Pane>
  • Вопрос задан
  • 2883 просмотра
Решения вопроса 1
@zelan
Кратко обо мне не получится.
Попробуй так:

Pane root = (Pane) FXMLLoader.load(getClass().getResource("sample.fxml"));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Adrenal1ne1
В fxml добавляешь:

<Button fx:id="refreshButton" mnemonicParsing="false"
                                        onAction="#handleButtonRefreshStatsAction" prefHeight="34.0"
                                        text="Refresh stats"/>


в контроллере прописываешь примерно так:

@FXML
	Button refreshButton = new Button();


и можешь на кнопку вешать функционал:

@FXML
	private void handleButtonRefreshStatsAction(ActionEvent event) {
		LOGGER.info("Pressed button Refresh Stats");

		Platform.runLater(new Runnable() {
			@Override
			public void run() {
				new Thread(new Runnable() {
					@Override
					public void run() {
						//DO SOMETHING HERE
					}
				}).start();
			}
		});
	}


Здесь ---> tutorials.jenkov.com/javafx/button.html простенький пример как сделать программно без FXML
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы