`
somefuture
  • 浏览: 1086661 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(翻译)第十八回 JavaFX2.0 列表框ListView

阅读更多

原文地址http://download.oracle.com/javafx/2.0/ui_controls/list-view.htm

 

 

ListView类呈现一个可滚动的项目列表。 Figure 12-1 展示了一个住宿类型列表。

 

Figure 12-1 Simple List View

Simple vertical list view.
Description of "Figure 12-1 Simple List View"

 

可以通过setItems 方法定义项目来产生列表。也可以使用setCellFactory 方法为列表中项目创建一个视图。

创建List View

Example 12-1中的代码块实现了Figure 12-1 中带有String 类项目的列表。

Example 12-1 Creating a List View Control

ListView<String> list = new ListView<String>();
ObservableList<String> items =FXCollections.observableArrayList (
    "Single", "Double", "Suite", "Family App");
list.setItems(items);

使用setPrefHeight 和setPrefWidth 方法来改变列表视图控件的大小和高度。Example 12-2限制垂直列表具有100点宽度和70点高度,效果见Figure 12-2。

Example 12-2 Setting Height and Width for a List View

list.setPrefWidth(100);
list.setPrefHeight(70);

Figure 12-2 Resized Vertical List

Resized list view object.
Description of "Figure 12-2 Resized Vertical List"

要将ListView对象设置为水平方向的可以通过将方向属性设为 Orientation.HORIZONTAL ,这样做即可:list.setOrientation(Orientation.HORIZONTAL)Figure 12-1Figure 12-3 中的水平列表具有相同的项目。

Figure 12-3 Horizontal List View Control

Description of Figure 12-3 follows
Description of "Figure 12-3 Horizontal List View Control"

可以用下面的组合方法获得每个项目当前的状态:

  • getSelectionModel().selectedIndexProperty() – 返回当前被选中项目的索引。

  • getSelectionModel().selectedItemProperty() – 返回当前被选中项目。

  • getFocusModel().getFocusedIndex() – 返回当前有焦点的项目索引。

  • getFocusModel().getFocusedItem() – 返回当前有焦点的项目。

注意,选中的和有焦点的项目都是只读的,应用启动后是不能为项目指定这些属性的。

前面的代码样例讲解了怎么创建具有文本项目的列表。然而,列表视图控件可以包含Node对象。

用数据产生List View

研究下面的代码学习怎么用细胞工厂(cell factory)产生列表项目。Example 12-3 中的应用创建了一个颜色模式列表。

Example 12-3 Creating a Cell Factory

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Callback;
 
public class Main extends Application {
 
    ListView<String> list = new ListView<String>();
    ObservableList<String> data = FXCollections.observableArrayList(
            "chocolate", "salmon", "gold", "coral", "darkorchid",
            "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue",
            "blueviolet", "brown");
 
    @Override
    public void start(Stage stage) {
        VBox box = new VBox();
        Scene scene = new Scene(box, 200, 200);
        stage.setScene(scene);
        stage.setTitle("ListViewSample");
        box.getChildren().addAll(list);
        VBox.setVgrow(list, Priority.ALWAYS);
 
        list.setItems(data);
 
        list.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
            @Override public ListCell<String> call(ListView<String> list) {
                return new ColorRectCell();
            }
        });
 
        stage.show();
    }
    
    static class ColorRectCell extends ListCell<String> {
        @Override
        public void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            Rectangle rect = new Rectangle(100, 20);
            if (item != null) {
                rect.setFill(Color.web(item));
                setGraphic(rect);
            }
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

细胞工厂产生了 ListCell 对象。每个细胞都关联一个单一的数据项目并显示列表中视图的一“行”。细胞呈现的内容通过setGraphic方法可以包含其他控件、文本、形状、图像。该应用中,列表细胞放的是矩形。

 Figure 12-4 是该应用编译运行后产生的效果。

Figure 12-4 List of Color Patterns

Description of Figure 12-4 follows
Description of "Figure 12-4 List of Color Patterns"

你可以滚动列表,选择或取消选择项目,也可以扩展应用来用颜色填充文本标签。

处理选中的List Item

按照 Example 12-4 修改应用的代码,以使其能处理特定项目被选中的事件。

Example 12-4 Processing Events for a List Item

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;
 
public class Main extends Application {
 
    ListView<String> list = new ListView<String>();
    ObservableList<String> data = FXCollections.observableArrayList(
            "chocolate", "salmon", "gold", "coral", "darkorchid",
            "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue",
            "blueviolet", "brown");
    final Label label = new Label();





 
    @Override
    public void start(Stage stage) {
        VBox box = new VBox();
        Scene scene = new Scene(box, 200, 200);
        stage.setScene(scene);
        stage.setTitle("ListViewSample");
        box.getChildren().addAll(list, label);
        VBox.setVgrow(list, Priority.ALWAYS);
 
        label.setLayoutX(10);
        label.setLayoutY(115);
        label.setFont(Font.font("Verdana", 20));
 
        list.setItems(data);
 
        list.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
            @Override public ListCell<String> call(ListView<String> list) {
                return new ColorRectCell();
            }
        });
 
        list.getSelectionModel().selectedItemProperty().addListener(

            new ChangeListener<String>() {

                public void changed(ObservableValue<? extends String> ov,

                    String old_val, String new_val) {

                        label.setText(new_val);

                        label.setTextFill(Color.web(new_val));

            }

        });

        stage.show();
    }
    
    static class ColorRectCell extends ListCell<String> {
        @Override
        public void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            Rectangle rect = new Rectangle(100, 20);
            if (item != null) {
                rect.setFill(Color.web(item));
                setGraphic(rect);
            }
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

addListener方法调用后为 selectedItemProperty 新建了一个ChangeListener<String> 对象来绑定选中项目的改变。比如说,深紫色项目被选中了,标签接收到了"darkorchid"标题并用相应的颜色填充。修改后应用的效果见Figure 12-5 .

Figure 12-5 Selecting a Dark Orchid Color Pattern

The dark orchid color is selected from the list.
Description of "Figure 12-5 Selecting a Dark Orchid Color Pattern"

0
0
分享到:
评论

相关推荐

    JavaFx实现百度文本框的下拉提示功能

    3. **创建下拉列表**:在JavaFX中,可以使用`ListView`或`TableView`来展示匹配结果。每当有新的匹配项时,将这些匹配项添加到列表视图中,并显示在文本框下方。 4. **显示与隐藏**:当用户停止输入或输入清空时,...

    JavaFx 入门文档,JavaFx实例

    此外,JavaFX提供了丰富的组件库,如按钮(Button)、文本框(TextField)、列表视图(ListView)等,以及动画和转换效果,使得开发者可以创建出动态和富有吸引力的应用界面。例如,可以使用`Timeline`类创建动画...

    Mastering JavaFX 8 Controls

    3. **ListView**: 列表视图是一种显示项目列表的有效方式。书中讲解了如何添加、删除列表项以及实现自定义的列表视图。 4. **TableView**: 表格视图用于展示表格形式的数据。读者将学会如何填充表格数据、排序列、...

    JavaFX CSS Reference Guide

    - 控件(Control):用于创建按钮、复选框、列表视图、菜单栏、滑块等交互式元素。 JavaFX CSS还提供了特定类型节点的样式设置,包括但不限于: - Accordion、Button、ButtonBase、Cell、CheckBox、CheckMenuItem...

    JavaFX_ChatRoom-main.zip

    JavaFX本身并不直接处理网络通信,但可以结合Java的`java.net`包或者第三方库如Netty进行实现。 2. **多线程**:为了保证用户界面的响应速度,通常会将网络I/O操作放在后台线程中执行,避免阻塞UI线程。JavaFX提供...

    javafx通讯录.zip

    在这个通讯录应用中,可能包含了显示联系人列表的`TableView`或`ListView`,用于输入和编辑信息的`TextInputControl`,以及用于导航和操作的按钮。 2. **添加个人信息**:用户可以通过界面输入新联系人的姓名、电话...

    javaFxAPI(PDF版)

    - `ListView`:显示可滚动的项目列表。 - `TableView`:用于展示表格数据,支持排序和过滤。 #### javafx.ui.canvas包 - **Overview**:这个包专注于图形对象的定义和操作,提供了画布类(`Canvas`),使得开发者...

    JavaFX蟹堡王餐厅管理系统

    "首页"通常会包含各种操作入口,如菜单浏览、订单查询等,这里可能运用了TableView或ListView来显示菜品列表,结合ComboBox或者Button实现筛选和选择功能。"购物车"模块则可能使用了ListView或TreeView来展示选定的...

    ListView,ComboBox和ObservableCollection

    ComboBox是一种下拉列表框,它允许用户从预定义的选项中选择或者输入自定义值。ComboBox也支持数据绑定,其ItemsSource属性同样可以绑定到ObservableCollection或其他数据源。当用户选择或输入值时,控件的...

    嗖嗖移动业务大厅JAVAFX版

    2. 数据展示模块:可能有表格(TableView)或列表视图(ListView)来显示数据,如用户的账户信息、业务记录等。开发者可以利用JavaFX的数据绑定机制,将后台数据实时反映到界面上。 3. 操作交互模块:可能包含了...

    yellerFX:用 JavaFX 编写的简单 IRC 客户端

    从 JavaFX 的角度,我们可以预期 YellerFX 使用 JavaFX 的控件来构建 IRC 客户端的界面,如 TextField 用于输入文本,Button 用于执行操作,ListView 或 TableView 可能用于显示频道或用户列表。此外,项目可能还...

    提供汉字、拼音、拼音首字母的模糊查询(匹配左侧)

    在这个模糊查询系统中,我们将用到`TextField`(文本框)、`ListView`(列表框)和`Button`(按钮)等基本组件。 1. **创建用户界面**: - `TextField`:用户输入查询内容的地方,可以监听其`onAction`事件来触发...

    Java实现拖拽列表项的排序功能

    在Java中,我们可能使用JavaFX或Swing来实现这样的功能。对于JavaFX,我们可以监听`onDragDetected`、`onDragEntered`、`onDragExited`、`onDragDropped`和`onDragDone`事件。以下是一个简化的JavaFX示例: ```java...

    java在线列表

    5. **JavaFX和Swing的ListView组件**: 如果需要在图形用户界面(GUI)中展示在线列表,JavaFX和Swing提供了ListView组件。这些组件允许用户直观地浏览和交互列表,例如选择、拖放等。 6. **线程安全**: 当在线列表...

    改变控件的背景颜色(LISTBOX)

    控件是用户与应用程序交互的基本元素,如按钮、文本框、列表框等。在这个场景中,我们关注的是“LISTBOX”,即列表框,一个可以显示多项选择的控件。在不同的编程语言和框架中,改变列表框背景颜色的方法会有所不同...

    JavaFxListExerciseReorganization

    这个项目“JavaFxListExerciseReorganization”显然是一个关于使用JavaFX处理列表视图(ListView)的练习或示例。让我们深入探讨JavaFX和ListView在其中的角色。 JavaFX提供了丰富的图形和媒体功能,包括2D和3D图形...

    MySocialNetwork:JavaFX应用程序

    此外,好友列表可能在用户界面上以列表或网格形式展示,这可以通过JavaFX的ListView或TableView组件来实现。 【私人聊天】 私聊功能需要一个消息传递系统,这可能涉及到服务器端的架构设计。开发者可能使用Socket...

    详细的java控件大全

    6. JComboBox:下拉列表框,用户可以从预定义的选项中选择。 7. JList:显示一组可选择的项目,用户可以通过滚动或选择来操作。 8. JTable:用于展示二维数据的表格,支持排序、筛选等功能。 9. JScrollPane:滚动...

    Getting the number of columns in report view获得列表视图的列

    列表视图是Windows API或许多编程框架(如.NET Framework、JavaFX、Qt等)中的一种控件,用于显示一系列项目,每个项目可以有多个字段或列。获取列表视图的列数对于调整布局、计算宽度分配以及确保数据正确显示至关...

    StudentManagementSystem:这是一个基本的学生管理应用程序,可以在其中管理学生的详细信息。 该项目是使用JavaFx开发的

    JavaFX提供了`TableView`和`ListView`组件,以及各种输入控件(`TextField`、`DatePicker`等)来实现这一功能。 4. **验证和错误处理**: 在用户输入数据时进行校验,确保数据格式正确。同时,对可能出现的异常进行...

Global site tag (gtag.js) - Google Analytics