java fx listview,JavaFX 8自定义ListView单元它是邪恶的
看起来你想要一个ControlsFX
PropertySheet:
类似的实现是在JavaFX 2 TableView : different cell factory depending on the data inside the cell的答案中.尽管该问题的答案基于TableView,ListView和TableView都是虚拟化控件,因此实现概念有点类似于在问题中概述的使用带有HBox的ListView.
根据问题的示例代码进行更新.
我仍然认为ControlsFX PropertySheet似乎是您尝试完成的最合适的解决方案.像ListView一样使用虚拟控件来完成这样的任务只会让事情变得比他们需要的更复杂.
基于ListView的属性编辑器的完整解决方案是一个相当复杂的事情,超出了StackOverflow答案中可合理提供的范围.
您在问题中提供的示例代码存在一些问题. ListView是一个虚拟化控件,因此您不应创建新的图形节点,以便在调用更新时始终放在ListView中.会发生什么是TextField获得焦点,然后在ListView上调用update并创建一个新的TextField,默认情况下新的TextField没有焦点.
我认为ListView本身对于您的特定情况有一些实现问题,并且调用更新次数太多了.无论如何,您应该编写代码,以便在单个单元格上适当地处理多次调用的更新.如果你这样做,ListView调用你的方法的次数多于它需要的时间并不重要.
以下是一些示例代码,可以帮助您取得更多进展.我不相信示例代码是您问题的完整解决方案,它当然不是作为Java对象的综合属性编辑器提供的,但它可能会给您一些灵感来帮助改进和实现您的代码(假设您决定继续尝试以这种方式解决这个问题).如果继续使用ListView,您可能需要查看ListView的编辑例程(类似于Oracle JavaFX教程中为editing table cells定义的内容).
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import java.lang.reflect.Field;
import java.time.LocalDate;
/**
* @author dmitrynelepov
* Modified by Jewelsea
*/
public class EvilHasSurvived extends Application {
static class TestClassForListView {
public String fieldString;
public LocalDate fieldDate;
@Override
public String toString() {
return "TestClassForListView{" +
"fieldString='" + fieldString + '\'' +
", fieldDate=" + fieldDate +
'}';
}
}
static class MyListCell extends ListCell {
private TextField textField;
private DatePicker datePicker;
private Object editedObject;
private ChangeListener editCommitHandler;
public MyListCell(Object editedObject) {
this.editedObject = editedObject;
setContentDisplay(ContentDisplay.RIGHT);
}
@Override
protected void updateItem(Field t, boolean bln) {
super.updateItem(t, bln);
if (datePicker != null) {
datePicker.focusedProperty().removeListener(editCommitHandler);
}
if (textField != null) {
textField.focusedProperty().removeListener(editCommitHandler);
}
if (t == null) {
setText(null);
setGraphic(null);
return;
}
if (t.getType().equals(String.class)) {
if (textField == null) {
textField = new TextField();
}
editCommitHandler = (observable, oldValue, newValue) -> {
try {
t.set(editedObject, textField.getText());
System.out.println(editedObject + " for " + textField + " value " + textField.getText());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
};
textField.focusedProperty().addListener(editCommitHandler);
setText(t.getName());
setGraphic(textField);
} else if (t.getType().equals(LocalDate.class)) {
if (datePicker == null) {
datePicker = new DatePicker();
}
editCommitHandler = (observable, oldValue, newValue) -> {
try {
t.set(editedObject, datePicker.getValue());
System.out.println(editedObject + " for " + datePicker + " value " + datePicker.getValue());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
};
datePicker.focusedProperty().addListener(editCommitHandler);
setText(t.getName());
setGraphic(datePicker);
}
}
}
@Override
public void start(Stage stage) throws Exception {
ListView listView = new ListView<>();
listView.setItems(
FXCollections.observableArrayList(
TestClassForListView.class.getFields()
)
);
TestClassForListView testObject = new TestClassForListView();
listView.setCellFactory(p -> new MyListCell(testObject));
stage.setScene(new Scene(listView));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
java fx listview,JavaFX 8自定义ListView单元它是邪恶的相关推荐
- Android代码 listview选中,android自定义listview的选中状态
中心思想:将选中状态设置为完全透明色(即看不到自定义的选中状态)然后将listview 的每一项的背景设置为选中则切换背景 1,选择2个图片一个为一般的显示状态,另一张为选中状态的图片 在drawab ...
- Java FX swt_DOC-13-08 JavaFX与SWT的协作性
DOC-13-08 JavaFX与SWT的协作性 本章展示了如何在SWT应用程序中加入一个JavaFX场景图,以及如何使SWT和JavaFX控件协作. 介绍 如果你开发SWT应用程序,你知道SWT使用 ...
- 自定义listView添加滑动删除功能
今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个 ...
- 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听
ListView在Android开发中是比较常用的系统组件,但是有时候我们除了需要做ListView上每一行的点击监听事件之外,如果每一行上还有其他需要监听的控件例如Button.CheckBox等, ...
- 自定义ListView【通用】适配器并实现监听控件
ListView:在Android应用开发过程中属于最常用的系统组件之一,当然可能童鞋们问为什么会突然游戏开发中讲这个,呵呵,其实在游戏开发中,也会常常使用到系统组件,比如游戏排行榜,简单的游戏关卡选 ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- android 自定义 滑动删除,Android_Android ListView实现仿iPhone实现左滑删除按钮的简单实例,需要自定义ListView。这里就交Fl - phpStudy...
Android ListView实现仿iPhone实现左滑删除按钮的简单实例 需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Ov ...
- Android自定义ListView示例,以创建不可滚动的ListView
In this tutorial we'll override the ListView class to suit it according to our requirements in the a ...
- Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表
本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...
最新文章
- 深入浅出gRPC——极客时间李林锋
- Middleware Monitor Cockpit SMWP
- Linux文件查找命令find,xargs详述
- linux 卸载 openldap,Linux下安装openldap
- springsecurity oauth2_跟OAuth2杠上了,老师,我要学全套的!
- ug快捷键命令大全_UG命令大全及快捷键的用法用处说明
- 情报使能 合作共赢 | TI INSIDE计划发布会即将开始
- 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作...
- HDOJ HDU 2088 Box of Bricks ACM 2088 IN HDU
- 传统算法与神经网络算法,神经网络是谁提出的
- 为什么html中图片显示不出来,网页图片显示不出来怎么办
- php去除空格、制表符、换页符
- c++ Simpson积分
- 第十二课 Java基础篇——面向对象进阶(三)
- 计算机专业被check后拒签,签证被Check是怎么一回事?解读美签的几种情况
- Python处理PDF神器:PyMuPDF的安装与使用
- 【用户画像】标签任务开发流程(源码之实体类、工具类、配置文件、DAO层)
- hloj#168“倒牛奶”解题讨论
- 【小程序开发之准备工作】如何开通云开发和CMS内容管理平台
- PCL 点云平移与旋转
热门文章
- java emoji问号,emoji-java 用来表情转换,你会用了吗?
- struts2 jsp跳转action 404_Struts2 学习笔记(三)
- 文字抖动_如何用PS制作故障风文字效果
- python编写篮球_Python编程2——Python实现计算篮球比赛是否领先安全的程序
- upload-labs_pass 9_::$DATA_绕过
- 无闪烁刷新页面 php,AJAX_Ajax实现无闪烁定时刷新页面实例代码,在Web开发中我们经常需要实现 - phpStudy...
- modelandview 可以返回html么_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...
- flutter offset_Flutter 仿微信界面聊天室 | 基于 (Flutter+Dart) 聊天实例
- python 基础之字符串方法
- Hadoop的启动和停止说明