javafx tableview与ObservableList进行数据双向绑定

javafx tableview与ObservableList进行数据双向绑定,第1张

TableView的数据填充,需要一个ObservableList。其中需要一个类来做数据填充。

下面看看我们数据填充的类:

复制代码代码如下:

import javafxbeanspropertySimpleDoubleProperty;

import javafxbeanspropertySimpleStringProperty;

/

@author wing

/

public final class DownloadData {

private final SimpleStringProperty fileName = new SimpleStringProperty();

private final SimpleStringProperty status = new SimpleStringProperty();

private final SimpleStringProperty dlSpeed = new SimpleStringProperty();

private final SimpleDoubleProperty progress = new SimpleDoubleProperty();

private final SimpleStringProperty downloadSize = new SimpleStringProperty();

private final SimpleStringProperty dlPercent = new SimpleStringProperty();

private String uuid;

public DownloadData(String filename, double progress) {

setFileName(filename);

setProgress(progress);

}

public DownloadData(String status, String filename, String dlSpeed, double progress) {

setStatus(status);

setFileName(filename);

setDlSpeed(dlSpeed);

setProgress(progress);

}

/

@return the fileName

/

public String getFileName() {

return fileNameget();

}

/

@param fileName the fileName to set

/

public void setFileName(String fileName) {

thisfileNameset(fileName);

}

public SimpleStringProperty fileNameProperty(){

return fileName;

}

/

@return the status

/

public String getStatus() {

return statusget();

}

/

@param status the statusto set

/

public void setStatus(String status) {

thisstatusset(status);

}

public SimpleStringProperty statusProperty(){

return status;

}

/

@return the String

/

public String getDlSpeed() {

return dlSpeedget();

}

/

@param dlSpeed the dlSpeed to set

/

public void setDlSpeed(String dlSpeed) {

thisdlSpeedset(dlSpeed);

}

public SimpleStringProperty dlSpeedProperty(){

return dlSpeed;

}

/

@return the progress

/

public double getProgress() {

return progressget();

}

/

@param progress the progress to set

/

public void setProgress(double progress) {

thisprogressset(progress);

}

public SimpleDoubleProperty progressProperty(){

return progress;

}

public String getDownloadSize() {

return downloadSizeget();

}

public void setDownloadSize(String downloadSize) {

thisdownloadSizeset(downloadSize);

}

public SimpleStringProperty downloadSizeProperty(){

return downloadSize;

}

public String getDlPercent() {

return dlPercentget();

}

public void setDlPercent(String dlPercent) {

thisdlPercentset(dlPercent);

}

public SimpleStringProperty dlPercentProperty(){

return dlPercent;

}

public String getUUID() {

return uuid;

}

public void setUUID(String uuid) {

thisuuid = uuid;

}

}

记住,用作数据填充的类,一定要用JavaFX的Property机制,可以进行数据绑定,这样在我们改变ObservableList的时候,TableView的数据才会实时刷新。

复制代码代码如下:

private final ObservableList<DownloadData> data

= FXCollectionsobservableArrayList();

ObservableList<TableColumn> observableList = mDownloadTablegetColumns();

observableListget(0)setCellValueFactory(new PropertyValueFactory("status"));

observableListget(1)setCellValueFactory(new PropertyValueFactory("fileName"));

observableListget(2)setCellValueFactory(new PropertyValueFactory("dlSpeed"));

observableListget(3)setCellValueFactory(new PropertyValueFactory("downloadSize"));

observableListget(4)setCellValueFactory(new PropertyValueFactory("progress"));

observableListget(4)setCellFactory(ProgressBarTableCellforTableColumn());

observableListget(5)setCellValueFactory(new PropertyValueFactory("dlPercent"));

mDownloadTablesetItems(data);

我们通过TableViewgetColumns来获取TableView的所有列。

CellValueFactory指的是TableView每一列里填充的数据。我们这里简单的使用PropertyValueFacotry。后面的要对应你DownloadData中的Property属性名。

CellFactory我们可以指定TableView中某一个Cell的视图类型。大家可以看到我用到了个ProgressBar。

另外CellFactory,JavaFX中自带部分的CellFactory,详细的大家可以在javafxscenecontrolcell包中找到。

接着我们通过创建DownloadData,设置数据,并添加到ObservableList中即可。

1 内部匿名类和Lambda表达式

在之前的例子上对

buttonsetOnAction(this);

进行更改

buttonsetOnAction(new EventHandler<ActionEvent>(){

@Override

public void handle(ActionEvent event){

Systemoutprintln("I am an annonymous inner class");

}

});

此时点击按钮调用的时间就是我们后来修改的,不用去检验每个按钮的名字,直接在生成对象之后对象的方法上调用内部类,使得事件发生。"Click me"。

但是后来会出现一个问题。按照上一次的想法我们有很多个按钮的时候会写出if条件结构,然后还要去对应代码中的对象,但是都使用内部匿名类也不方便。

甲骨文公司在Java 8中开始加入了Lambda表达式,此时将这个语句改成如下:

buttonsetOnAction(e-> Systemoutprintln("heyyyyy, I am Lambda"));

此时控制台对我们点击了按钮进行回应:heyyyyy, I am Lambda,Java自动帮我们处理这个事件。同时也可以改成

buttonsetOnAction(e->{

Systemoutprintln("heyyyyy, I am Lambda1");

在Java中,ObservableValue 是一个接口,它是 JavaFX 库中的一部分。ObservableValue 是一个用于表示可观察的值的接口,它允许开发者在 JavaFX 应用程序中实现数据绑定和监听。在 JavaFX 中,ObservableValue 是一个非常常用的接口,它用于跟踪一个值的变化,并在值发生变化时通知监听者。

ObservableValue 接口定义了以下几个主要的方法:

addListener(ChangeListener< super T> listener):向 ObservableValue 添加一个值变化的监听器

removeListener(ChangeListener< super T> listener):从 ObservableValue 移除一个值变化的监听器。

getValue():获取当前的值。

addInvalidationListener(InvalidationListener listener):向 ObservableValue 添加一个无效化监听器。

removeInvalidationListener(InvalidationListener listener):从 ObservableValue 移除一个无效化监听器。

invalidated():通知所有的无效化监听器,值已经无效。

通过使用 ObservableValue,您可以创建一个可以观察的属性,并在属性值发生变化时自动通知相关的监听器。这在实现数据绑定、MVC(Model-View-Controller)模式以及其他需要监听属性值变化的场景中非常有用。

fx:controller属性对应的是类名称

fx:controller ="类"

程序中是FXMLLoader来加载这个fxml文件

读入后对所在的FXMLLoader对象上执行

MyController c=(MyController) fxmlloadergetController();

获得控制器

完整的java代码如下:

import javaxswing;

import javaawtevent;

public class FileChooserDemo extends JFrame implements ActionListener {

// 创建一个按钮,用于打开文件选择框

private JButton openButton;

// 创建一个文件选择框对象

private JFileChooser fileChooser;

public FileChooserDemo() {

// 设置窗口标题和大小

super("文件选择框示例");

setSize(300, 200);

// 设置窗口布局为流式布局

setLayout(new FlowLayout());

// 初始化按钮,并添加动作监听器

openButton = new JButton("打开文件");

openButtonaddActionListener(this);

// 初始化文件选择框,并设置为系统样式[^1^][2]

fileChooser = new JFileChooser();

fileChoosersetFileSelectionMode(JFileChooserFILES_ONLY);

try {

UIManagersetLookAndFeel(UIManagergetSystemLookAndFeelClassName());

SwingUtilitiesupdateComponentTreeUI(fileChooser);

} catch (Exception e) {

eprintStackTrace();

}

// 将按钮添加到窗口中

add(openButton);

// 设置窗口可见和关闭 *** 作

setVisible(true);

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

@Override

public void actionPerformed(ActionEvent e) {

if (egetSource() == openButton) {

// 当点击打开文件按钮时,d出文件选择框[^2^][1]

int result = fileChoosershowOpenDialog(this);

if (result == JFileChooserAPPROVE_OPTION) {

// 当用户选择了一个文件时,获取并显示文件路径

String filePath = fileChoosergetSelectedFile()getPath();

JOptionPaneshowMessageDialog(this, "你选择了:" + filePath);

}

}

}

public static void main(String[] args) {

new FileChooserDemo();

}

}

1、Textfield 有一个方法叫getText(),用于获取文本的值,但取到的是字符串。要取得用户输入的信息,需要有一个触发按钮,比如提交。刚开始Textfield 的值是空的,当用户输入值后再点击 提交按钮,getText() 方法就能获取到 用户输入的值。

getText() 这个方法 不仅 Textfield 有这个方法,基本所有的组件都有这个方法取得组件里面的值。

2、TextField不需要设置就可以输入了,getText()是可以得到它的文本的,好像得不到可能是因为你没写条件,程序就运行了一次,而第一次文本框里面是没有值的,当然得不到啦

你可以

TextField txt=new TextField();

txtsetBounds(50,50,120,30);

thisgetContentPane()add(txt);

while(true)

{

Systemoutprintln(txtgetText());

}

3、你可以使用    JTextField  jtf=new JTextField(" *** 作员");

就可以用getText()获得值了。

4、是允许用户输入的,通过getText可以得到的不过转换成String显示的。

5、DoubleparseDouble() 转double

IntegerparseInt() 转int

TextField获取输入的数据,可以使用TextFieldgetText()trim();

其中getText()是获得文本,trim()是用来去掉文本前后的空字符的。

TextField的其他 *** 作可以查看JDK提供的API查看。

JavaFX 移动平台通过一系列手机设备传送富互联网应用程序

位于加州的Sun公司推出了用于开发和传送富互联网应用的Java移动平台 该平台致力于创建能满足不同客户需求的应用程序生态系统

开发人员可以通过普通的桌面和移动平台API创建拥有高保真声频和视频 多格式文本 向量化制图 动画和网络服务的RIA JavaFX移动版在Java ME技术上运行 可以使桌面和网络开发人员优化其程序 用于特殊的手机功能

据Sun的高级营销总监Param Singh说 我们提供编程模式的期望是过去开发工作中核心改变之一

Singh称 公司以不同的方式涉足手机领域 即与OEM和 *** 作者的合作覆盖了整个设备栈 包括大众市场和智能手机 这关乎我们怎样帮助客户建立一个拥有成百上千程序的生态系统 虽然Sun将一直把注意力集中在高端手机市场 但是公司也意识到了低端市场的快速发展 而且低端市场的用户也希望跨平台获取信息

由于JavaFX手机版基于JavaME技术 对OEM和 *** 作员的响应需要更紧密的融合和更低廉的成本 在其他供货商的平台 你可以建立好看的可视化程序但是你怎样才能利用设备的功能呢无疑将是个难题

Enderle 集团的主要分析师Rob Enderle说 对于Sun来说在移动RIA领域的难题是他们开始得稍微晚了一些 因为很多公司都已经涉足这一领域了 现在这一领域的最主要的公司有Adobe System公司 该公司的地位甚至是微软都不能替代的

但是也有积极的一面 Java是移动手机领域中较为广泛应用的技术之一 把Java衍生物应用到更多的涉及图像的领域对开发人员是极具吸引力的 开发人员对JavaFX的接受程度不一 主要是看转变到JavaFX有多困难

考虑到大众市场和智能手机市场的需求 Enderle注意到低端设备倾向于不在浏览器上提供用户经验 而JavaFX不会那样做

他还说 虽然Sun确实可以为手机增加更多功能 但是也取决于手机制造商是否能使这一过程简单一些

JavaFX移动版的推出的同时 Sun也宣布与其合作的一些手机生产商 服务运营商和独立软件开发商 包括索尼爱立信 LG以及Sprint 虽然Sun在过去曾表示过希望与苹果公司的iPhone合作 但是这一流行的手机品牌却并未列入其合作者的名单中

Singh称 Sun虽然暂时未与苹果公司取得合作 但是Sun已经成功宣告JavaFX可以在Google的Android之上运行 所以对于在任何平台传送JavaFX和Java堆栈都没有技术障碍了 不过我们还是会根据合作对象的意向来选择怎样 *** 作

这一次的发布是继JavaFX移动测试版后的又一次发布 它们之间的主要区别是后者加入了更多核心功能 其产品也进行了更新 编译器也进行了优化 而且修复了近 个漏洞

lishixinzhi/Article/program/Java/Javascript/201311/25334

以上就是关于javafx tableview与ObservableList进行数据双向绑定全部的内容,包括:javafx tableview与ObservableList进行数据双向绑定、JAVAFX怎么获取窗口句柄、Java中observablevalue是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9323387.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存