javafx基于使用fxml布局的tableview数据绑定用法

本文介绍了一个使用JavaFX实现的FXML TableView数据绑定示例。通过Sample.fxml界面文件与SampleController类的配合,展示了如何将User对象的数据展示在TableView上。具体包括界面布局定义、控制器初始化逻辑及数据对象创建。

来个简单明了的

fxml的tableview数据绑定和java代码方式的数据绑定很像,不同的在于要有一到映射

首先看个目录

1.界面文件Sample.fxml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <?import java.lang.*?>
 4 <?import java.util.*?>
 5 <?import javafx.scene.control.*?>
 6 <?import javafx.scene.layout.*?>
 7 <?import javafx.scene.paint.*?>
 8 
 9 <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" 
10             xmlns:fx="http://javafx.com/fxml" xmlns="http://javafx.com/javafx/2.2"
11             fx:controller="test.SampleController" 
12 >
13   <children>
14     <TableView layoutX="132.0" layoutY="33.0" prefHeight="107.0" prefWidth="310.0" fx:id="tview">
15       <columns>
16         <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="137.0" text="用户名" fx:id="colUsername"/>
17         <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="143.0" text="密码" fx:id="colPassword"/>
18       </columns>
19     </TableView>
20   </children>
21 </AnchorPane>
View Code

2.SampleController代码

 1 package test;
 2 
 3 import java.net.URL;
 4 import java.util.ResourceBundle;
 5 import javafx.collections.FXCollections;
 6 import javafx.collections.ObservableList;
 7 import javafx.fxml.FXML;
 8 import javafx.fxml.Initializable;
 9 import javafx.scene.control.TableColumn;
10 import javafx.scene.control.TableView;
11 import javafx.scene.control.cell.PropertyValueFactory;
12 
13 
14 public class SampleController implements Initializable {
15     
16     @FXML private TableView tview;
17     @FXML private TableColumn colUsername;
18     @FXML private TableColumn colPassword;
19    
20     
21     public void showList(){
22         ObservableList<User> list = FXCollections.observableArrayList();
23         User user = new User();//构建值对象
24          user.setUsername("小六");
25          user.setPassword("123");
26                  
27         colUsername.setCellValueFactory(new PropertyValueFactory("username"));//映射          
28         colPassword.setCellValueFactory(new PropertyValueFactory("password"));          
29         
30          list.add(user);        //list添加值对象
31          tview.setItems(list); //tableview添加list
32        }
33    
34     
35     @Override
36     public void initialize(URL url, ResourceBundle rb) {
37         showList();
38     }    
39 }
View Code

3.User.java代码

package test;
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
View Code

4.Test.java

package test;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Test extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
View Code

然后达到效果

 

<think>好的,我现在需要帮助用户了解如何在JavaFX中打开一个新页面并在其中加载TableView组件。首先,我需要回忆JavaFX的基本结构和组件使用方式。用户提到了引用[2]中的场景切换和引用[5]中的TableView分页,这可能涉及到FXML加载、控制器类以及TableView数据绑定。 首先,用户想要在新页面加载TableView,所以可能需要创建一个新的FXML文件,里面包含TableView组件。然后,通过FXMLLoader加载这个FXML文件,并设置到新的场景或舞台中。引用[2]中的示例展示了如何加载FXML并创建场景,这应该是一个关键的参考点。 接下来,考虑如何将数据填充到TableView中。引用[4]中的Category类可能是一个数据模型,需要为TableView定义列,并将数据绑定到这些列上。需要确保在FXML文件中正确设置TableView的列,并在控制器类中初始化数据。 另外,引用[5]提到了分页,但用户的问题可能不需要分页,不过其中的FXML布局和控制器设置可能有参考价值。需要确保在控制器中正确获取TableView的实例,并设置单元格值工厂。 可能还需要处理窗口的切换,比如点击按钮后打开新窗口显示TableView。这涉及到事件处理和场景切换,如引用[2]中的方法。 需要检查步骤是否正确:创建FXML文件、定义TableView及其列、创建数据模型、编写控制器类、加载FXML并显示场景。同时,要注意可能的异常处理,比如IO异常。 最后,生成相关问题时,应该考虑用户可能进一步想了解的内容,比如数据绑定、动态加载、分页或样式设置,这些都与TableView使用相关。</think>在JavaFX中加载包含TableView的新页面需要以下步骤: ### 一、创建FXML布局文件 新建`student_view.fxml`文件,使用TableView组件: ```xml <?xml version="1.0" encoding="UTF-8"?> <BorderPane xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.StudentController"> <center> <TableView fx:id="studentTable"> <columns> <TableColumn text="学号" prefWidth="100"> <cellValueFactory><PropertyValue property="id"/></cellValueFactory> </TableColumn> <TableColumn text="姓名" prefWidth="150"> <cellValueFactory><PropertyValue property="name"/></cellValueFactory> </TableColumn> </columns> </TableView> </center> </BorderPane> ``` [^2] ### 二、创建数据模型类 ```java public class Student { private final SimpleStringProperty id; private final SimpleStringProperty name; public Student(String id, String name) { this.id = new SimpleStringProperty(id); this.name = new SimpleStringProperty(name); } // Getter方法省略... } ``` ### 三、编写控制器类 ```java public class StudentController implements Initializable { @FXML private TableView<Student> studentTable; @Override public void initialize(URL location, ResourceBundle resources) { ObservableList<Student> data = FXCollections.observableArrayList( new Student("1001", "张三"), new Student("1002", "李四") ); studentTable.setItems(data); } } ``` ### 四、页面加载与切换 ```java public void loadTableViewPage(Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(getClass().getResource("student_view.fxml")); Parent root = loader.load(); Scene scene = new Scene(root, 800, 600); primaryStage.setTitle("学生信息表"); primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { e.printStackTrace(); } } ``` [^2][^5] ### 五、动态数据加载(可选扩展) ```java // 在控制器中添加方法 public void addStudent(Student student) { studentTable.getItems().add(student); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值