JavaFX如何获取ListView(列表视图)的选项
作者:闪光的回忆
这篇文章主要介绍了JavaFX如何获取ListView(列表视图)的选项,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
我们使用下面的图片进行举例,点击左侧ListView选项,右侧label面板显示对应颜色。
如何获取用户的选择项?
上代码
/** * listView的事件处理添加 */ listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { //s:改变前的值 t1:改变后的值 @Override public void changed(ObservableValue<? extends String> observableValue, String s, String t1) { if ("AQUAMARINE".equals(t1)){ label.setStyle("-fx-background-color: AQUAMARINE" ); }else if ("SPRINGGREEN".equals(t1)){ label.setStyle("-fx-background-color: SPRINGGREEN"); }else if ("Tan".equals(t1)){ label.setStyle("-fx-background-color: Tan"); } } });
其中“ ”中的字母为色彩代码,通过上面的代码即可为ListView添加事件处理
---------------------分界线---------------------
下面是完整代码
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Ellipse; import javafx.stage.Stage; import javafx.util.Callback; /** * 点击颜色块显示对应颜色的图形 * @author C y c l e */ public class ListViewColorDemo extends Application { private BorderPane root = new BorderPane(); private ListView<String> listView = new ListView<>(FXCollections.observableArrayList( "AQUAMARINE", "SPRINGGREEN", "Tan" )); public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { Label label = new Label("色彩块"); label.setPrefSize(200, 300); label.setStyle("-fx-background-color: #ffffff"); VBox vBox = new VBox(5); vBox.setPrefSize(200, 300); vBox.getChildren().add(listView); root.setLeft(vBox); root.setRight(label); //将listView设置为单元工厂 listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() { @Override public ListCell<String> call(ListView<String> stringListView) { //返回一个自定义的ListCell实现类对象 return new ColorCell(); } }); /** * listView的事件处理添加 */ listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { //s:改变前的值 t1:改变后的值 @Override public void changed(ObservableValue<? extends String> observableValue, String s, String t1) { if ("AQUAMARINE".equals(t1)){ label.setStyle("-fx-background-color: AQUAMARINE" ); }else if ("SPRINGGREEN".equals(t1)){ label.setStyle("-fx-background-color: SPRINGGREEN"); }else if ("Tan".equals(t1)){ label.setStyle("-fx-background-color: Tan"); } } }); primaryStage.setScene(new Scene(root, 400, 300)); primaryStage.show(); } /** * 自定义一个带颜色的单元格 */ class ColorCell extends ListCell<String>{ @Override protected void updateItem(String s, boolean b) { super.updateItem(s, b); Ellipse ellipse = new Ellipse(70, 10); //设置图形颜色 if (!b){ ellipse.setFill(Color.web(s)); setGraphic(ellipse); } } } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。