Я пытаюсь выполнить действие при выборе элемента из представления списка (в настоящее время у меня работает comboBox, но я бы хотел изменить его на listView или любой другой тип, который может отображать выбираемые элементы вформа списка, если у вас есть идеи различных элементов управления, я открыт для идей)
В любом случае, у меня есть listView с методом изменения свойства, чтобы выполнить определенное действие при выборе элемента изсписок.У меня также есть другой метод, который обновил список.Когда я нажимаю кнопку обновления и пытаюсь выбрать элемент из списка, я получаю нулевой указатель на lw.getSelectionModel (). GetSelectedItem ().Я пытался противостоять этому, делая заявление, не работает.
public void initialize(URL arg0, ResourceBundle arg1) {
if(arr != null || arr.length > 0) {
for(int i = 0; i<arr.length; i++) {
cmBox.getItems().add(arr[i]);
lw.getItems().add(arr[i]);
}
}
lw.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if(lw.getSelectionModel().getSelectedItem() == null) {
lw.getSelectionModel().selectFirst();
}
String selectedString = lw.getSelectionModel().getSelectedItem();
String[] conParts = selectedString.split("@");
String selectedConName = conParts[0];
number = conParts[1];
selectedName = selectedConName;
displayTF(selectedName);
}
});
}
для сравнения, этот метод работает с comboBox:
public void pickContact(ActionEvent event) {
if(cmBox.getSelectionModel().getSelectedIndex() == -1) {
return;
}
String selectedString = arr[cmBox.getSelectionModel().getSelectedIndex()];
String[] conParts = selectedString.split("@");
String selectedConName = conParts[0];
number = conParts[1];
selectedName = selectedConName;
displayTF(selectedName);
}
Кроме того, это метод обновления:
public void reloadCmBox(ActionEvent event) {
cmBox.getItems().clear();
arr = sqld.selectAll();
cmBox.setItems(FXCollections.observableArrayList(Arrays.asList(arr)));
cmBox.getSelectionModel().selectFirst();
lw.getItems().clear();
lw.setItems(FXCollections.observableArrayList(Arrays.asList(arr)));
cmBox.getSelectionModel().selectFirst();
}
Если выИнтересно, это файл fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="409.0" prefWidth="535.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.CVController">
<children>
<TextField fx:id="tf" layoutX="325.0" layoutY="75.0" />
<Button layoutX="325.0" layoutY="141.0" mnemonicParsing="false" onAction="#placeCall" text="Call" />
<Button fx:id="sendText" layoutX="367.0" layoutY="141.0" mnemonicParsing="false" onAction="#sendText" text="Text" />
<Button fx:id="OpenConEditor" layoutX="412.0" layoutY="141.0" mnemonicParsing="false" onAction="#openConEditer" text="Edit" />
<Button layoutX="458.0" layoutY="141.0" mnemonicParsing="false" onAction="#deleteCon" text="Delete" />
<Button fx:id="OpenConCreator" layoutX="483.0" layoutY="75.0" mnemonicParsing="false" onAction="#openConAdder" text="New" />
<ComboBox fx:id="cmBox" layoutX="93.0" layoutY="74.0" onAction="#pickContact" prefHeight="28.0" prefWidth="223.0" />
<Label layoutX="231.0" layoutY="20.0" prefHeight="28.0" prefWidth="149.0" text="Contacts View">
<font>
<Font size="20.0" />
</font>
</Label>
<Button fx:id="SDTomer" layoutX="77.0" layoutY="162.0" mnemonicParsing="false" onAction="#speedDial" text="Tomer" />
<Label layoutX="77.0" layoutY="133.0" text="Speed Dial">
<font>
<Font size="16.0" />
</font>
</Label>
<Button layoutX="46.0" layoutY="75.0" mnemonicParsing="false" onAction="#reloadCmBox" text="R" />
<ListView fx:id="lw" layoutX="153.0" layoutY="187.0" prefHeight="200.0" prefWidth="200.0" />
</children>
</AnchorPane>