JavaFX ошибка взаимодействия с графическими элементами из контроллера
В окне не выводится сообщение, кнопка addWord работает, слово уходит, но не отображается на экране.
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
public class Controller {
@FXML
private TextField inputField;
@FXML
private ListView<String> listView;
private final ObservableList<String> wordlist= FXCollections
.observableArrayList("Привет", "Я","Тата");
@FXML
public void initialize() {
listView=new ListView<>();
listView.setItems(wordlist);
}
@FXML
public void addWordToList(){
String word=inputField.getText();
listView.getItems().add(word);
inputField.clear();
}
}
Класс запуска:
public class Launcher {
public static void main(String[] args) { Main.main(args);
}
}
Класс приложения:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
public final String PATH_TO_FXML= "sample.fxml";
@Override
public void start(Stage primaryStage)throws Exception{
Parent root= FXMLLoader.load(getClass().getResource(PATH_TO_FXML));
primaryStage.setTitle("Lesson4");
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Разметка:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
prefHeight="400.0" prefWidth="418.0" fx:controller= "Controller"
xmlns="http://javafx.com/javafx/11.0.1"
xmlns:fx="http://javafx.com/fxml/1">
<top>
<MenuBar BorderPane.alignment="CENTER">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
</top>
<bottom>
<SplitPane fx:id="splitPane" dividerPositions="0.7235576923076923" prefHeight="80.0" prefWidth="418.0" BorderPane.alignment="CENTER">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
<children>
<TextField fx:id="inputField" layoutX="-2.0" layoutY="-1.0" onAction="#addWordToList" prefHeight="80.0" prefWidth="301.0" />
</children>
</AnchorPane>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
<children>
<Button layoutX="-1.0" layoutY="-3.0" mnemonicParsing="false" onAction="#addWordToList" prefHeight="83.0" prefWidth="112.0" text="Add word" />
</children>
</AnchorPane>
</items>
</SplitPane>
</bottom>
</BorderPane>
В чем ошибка?
Ответы (1 шт):
Автор решения: Вадим
→ Ссылка
у вас в разметке отсутствует ListView, добавьте прежде всего в разметку ListView
<BorderPane>
......
<center>
<ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
......
</BorderPane>
в котором указана привязка к компоненту в контроллере через атрибут fx:id в вашем случае имя listView
Далее в контроллере уже не нужно создавать ListView строкой listView = new ListView<>(); Так как поле listView у вас привязано к разметке, так что эту строчку удалите и получится:
@FXML
public void initialize() {
listView.setItems(wordlist);
}