Added JavaFX demo app for ListView CellFactory (#11133)
* Added JavaFX demo app for ListView CellFactory * Moved to the common project
This commit is contained in:
parent
5dfb39712d
commit
cf452d7add
|
@ -0,0 +1,38 @@
|
||||||
|
package com.baeldung.listview;
|
||||||
|
|
||||||
|
import com.baeldung.listview.cellfactory.CheckboxCellFactory;
|
||||||
|
import com.baeldung.listview.cellfactory.PersonCellFactory;
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
public class ExampleController implements Initializable {
|
||||||
|
@FXML
|
||||||
|
private ListView<Person> listView;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
ObservableList<Person> wordsList = FXCollections.observableArrayList();
|
||||||
|
wordsList.add(new Person("Isaac", "Newton"));
|
||||||
|
wordsList.add(new Person("Albert", "Einstein"));
|
||||||
|
wordsList.add(new Person("Ludwig", "Boltzmann"));
|
||||||
|
listView.setItems(wordsList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void defaultButtonClick() {
|
||||||
|
listView.setCellFactory(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cellFactoryButtonClick() {
|
||||||
|
listView.setCellFactory(new PersonCellFactory());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkboxCellFactoryButtonClick() {
|
||||||
|
listView.setCellFactory(new CheckboxCellFactory());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.baeldung.javafx.listview;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Parent;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class Main extends Application {
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage primaryStage) throws Exception {
|
||||||
|
FXMLLoader loader = new FXMLLoader();
|
||||||
|
URL xmlUrl = getClass().getResource("/example.fxml");
|
||||||
|
loader.setLocation(xmlUrl);
|
||||||
|
Parent root = loader.load();
|
||||||
|
|
||||||
|
primaryStage.setTitle("List View Demo");
|
||||||
|
primaryStage.setScene(new Scene(root));
|
||||||
|
primaryStage.show();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.baeldung.listview;
|
||||||
|
|
||||||
|
public class Person {
|
||||||
|
|
||||||
|
private final String firstName;
|
||||||
|
private final String lastName;
|
||||||
|
|
||||||
|
public Person(String firstName, String lastName) {
|
||||||
|
this.firstName = firstName;
|
||||||
|
this.lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFirstName() {
|
||||||
|
return firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastName() {
|
||||||
|
return lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return firstName + " " + lastName;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.baeldung.listview.cellfactory;
|
||||||
|
|
||||||
|
import com.baeldung.listview.Person;
|
||||||
|
import javafx.scene.control.CheckBox;
|
||||||
|
import javafx.scene.control.ListCell;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.util.Callback;
|
||||||
|
|
||||||
|
public class CheckboxCellFactory implements Callback<ListView<Person>, ListCell<Person>> {
|
||||||
|
@Override
|
||||||
|
public ListCell<Person> call(ListView<Person> param) {
|
||||||
|
return new ListCell<Person>(){
|
||||||
|
@Override
|
||||||
|
public void updateItem(Person person, boolean empty) {
|
||||||
|
super.updateItem(person, empty);
|
||||||
|
if (empty) {
|
||||||
|
setText(null);
|
||||||
|
setGraphic(null);
|
||||||
|
} else if (person != null) {
|
||||||
|
setText(null);
|
||||||
|
setGraphic(new CheckBox(person.getFirstName() + " " + person.getLastName()));
|
||||||
|
} else {
|
||||||
|
setText("null");
|
||||||
|
setGraphic(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.listview.cellfactory;
|
||||||
|
|
||||||
|
import com.baeldung.listview.Person;
|
||||||
|
import javafx.scene.control.ListCell;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.util.Callback;
|
||||||
|
|
||||||
|
public class PersonCellFactory implements Callback<ListView<Person>, ListCell<Person>> {
|
||||||
|
@Override
|
||||||
|
public ListCell<Person> call(ListView<Person> param) {
|
||||||
|
return new ListCell<Person>(){
|
||||||
|
@Override
|
||||||
|
public void updateItem(Person person, boolean empty) {
|
||||||
|
super.updateItem(person, empty);
|
||||||
|
if (empty || person == null) {
|
||||||
|
setText(null);
|
||||||
|
} else {
|
||||||
|
setText(person.getFirstName() + " " + person.getLastName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.ListView?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
|
||||||
|
<AnchorPane prefHeight="188.0" prefWidth="457.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.baeldung.listview.ExampleController">
|
||||||
|
<children>
|
||||||
|
<ListView id="listView" fx:id="listView" layoutX="14.0" layoutY="25.0" prefHeight="138.0" prefWidth="256.0" />
|
||||||
|
<Button layoutX="283.0" layoutY="25.0" mnemonicParsing="false" onAction="#defaultButtonClick" prefHeight="25.0" prefWidth="139.0" text="Default" />
|
||||||
|
<Button layoutX="283.0" layoutY="63.0" mnemonicParsing="false" onAction="#cellFactoryButtonClick" prefHeight="25.0" prefWidth="139.0" text="Cell Factory" />
|
||||||
|
<Button layoutX="283.0" layoutY="104.0" mnemonicParsing="false" onAction="#checkboxCellFactoryButtonClick" prefHeight="25.0" prefWidth="139.0" text="Checkbox Cell Factory" />
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
Loading…
Reference in New Issue