0

I have a ListSelectionView (from the ControlsFX library) in JavaFX and I need it to display a set of values when a particular button is clicked. It displays the values when I place the add the contents into it in the initialize method. But when I place the same code in the event action method of a button it doesn't display. I have another method which gets the Source items and Target items from the ListSelectionView and displays them. Even though the ListSelectionView isn't displaying anything, the getSourceItems() method returns a set of values which are then displayed.

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;
    @FXML
    private Button button;
    @FXML
    private JFXListView<Label> listv;
    @FXML
    private ListSelectionView<Label> abc;


    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }    

    @FXML
    private void handleToggle(MouseEvent event) {

        ObservableList<Label> users = FXCollections.observableArrayList();


        abc.setSourceHeader(new Label("Present"));
           abc.setTargetHeader(new Label("Absent"));

        for (int i=0; i<4;i++)
        {
           users.add(new Label("Name "+i));
         }
        abc.setSourceItems(users);
        abc.setDisable(false);
         for (int i=0; i<4;i++)
        {
            Label k = new Label("Hello"+i);
            listv.getItems().add(k);

        }
    }

    @FXML
    private void handlenewNOde(MouseEvent event) {

        ObservableList<Label> users1 =abc.getSourceItems();
       System.out.println("Source items");
       for(int i =0; i<users1.size(); i++)
       {
           Label k=users1.get(i);
           System.out.println(k.getText());
       }
       System.out.println("Target items");
       ObservableList<Label> users12 =abc.getTargetItems();

       for(int i =0; i<users12.size(); i++)
       {
           Label k=users12.get(i);
           System.out.println(k.getText());
       }
    }

}

.fxml :

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

<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXListView?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import org.controlsfx.control.ListSelectionView?>

<AnchorPane id="AnchorPane" prefHeight="680.0" prefWidth="914.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="listselectionviewtryout.FXMLDocumentController">
    <children>
        <Button fx:id="button" layoutX="14.0" layoutY="21.0" onAction="#handleButtonAction" text="Click Me!" />
        <Label fx:id="label" layoutX="17.0" layoutY="54.0" minHeight="16" minWidth="69" />
      <JFXListView fx:id="listv" layoutX="131.0" layoutY="35.0" prefHeight="237.0" prefWidth="75.0" />
      <JFXButton layoutX="413.0" layoutY="58.0" onMouseClicked="#handleToggle" text="Toggle Extension" />
      <JFXButton layoutX="445.0" layoutY="134.0" onMouseClicked="#handlenewNOde" text="new Node" />
      <ListSelectionView fx:id="abc" layoutX="226.0" layoutY="262.0" />
    </children>
</AnchorPane>

Ignore the JFXListView. Output:

Source items
Name 0
Name 1
Name 2
Name 3
Target items

enter image description here

SaberSz
  • 115
  • 1
  • 10

1 Answers1

0

Should

 abc.setSourceItems(users);

be

abc.getSourceItems().addAll(users);
SedJ601
  • 12,173
  • 3
  • 41
  • 59