JavaFX 2:获取 TableCell 行索引

2023-12-27

我有一个带有复选框的表。当我单击第三列或第四列中的复选框时,我想更改第一列中复选框的选择。我希望能够更改同一行上的其他单元格。我已经有了列,所以我想知道单元格位于哪一行。我也非常不确定到目前为止是否正确。

到目前为止我所做的大部分是来自

  • http://download.oracle.com/javafx/2.0/ui_controls/list-view.htm http://download.oracle.com/javafx/2.0/ui_controls/list-view.htm
  • http://download.oracle.com/javafx/2.0/ui_controls/table-view.htm http://download.oracle.com/javafx/2.0/ui_controls/table-view.htm
  • http://download.oracle.com/javafx/2.0/api/index.html?javafx/scene/control/Cell.html http://download.oracle.com/javafx/2.0/api/index.html?javafx/scene/control/Cell.html

这是我的 SSCCE(简短的独立可编译示例)

如果下面的代码有问题,请纠正我。

package javafxapplication5;

import javafx.application.Application;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;

public class JavaFXApplication extends Application {

    private static final ObservableList<ContactOptions> addContactOption = FXCollections.observableArrayList(
            new ContactOptions("Yes", "John Doe", "No", "Yes"),
            new ContactOptions("Yes", "Jane Doe", "No", null),
            new ContactOptions("Yes", "John Smith", "Yes", "Yes"),
            new ContactOptions("Yes", "Patty Smith", "Yes", "No"),
            new ContactOptions("Yes", "Jo Johnson", "Yes", "Yes"),
            new ContactOptions("No", "Mary Johnson", "No", "No"),
            new ContactOptions("Yes", "Clint Doe", "No", null),
            new ContactOptions("Yes", "Sally Sue", "No", "Yes"),
            new ContactOptions("Yes", "Bob Ryan", null, "Yes"),
            new ContactOptions("No", "Mary Sue", "No", "No"),
            new ContactOptions("Yes", "Bob Smith", "No", "Yes"));
    private static TableView<ContactOptions> contactOptions = new TableView<ContactOptions>();

    public static void main(String[] args) {
        Application.launch(JavaFXApplication.class, args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 200, Color.LIGHTGREEN);

        Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell>() {

            @Override
            public TableCell call(final TableColumn param) {
                final CheckBox checkBox = new CheckBox();
                final TableCell cell = new TableCell() {

                    @Override
                    public void updateItem(Object item, boolean empty) {
                        super.updateItem(item, empty);
                        if (item == null) {
                            checkBox.setDisable(true);
                            checkBox.setSelected(false);
                        } else {
                            checkBox.setDisable(false);
                            checkBox.setSelected(item.toString().equals("Yes") ? true : false);
                            commitEdit(checkBox.isSelected() ? "Yes" : "No");
                        }
                    }
                };
                cell.setNode(checkBox);
                return cell;
            }
        };

        TableColumn firstCol = new TableColumn("Contact?");
        firstCol.setPrefWidth(60);
        firstCol.setProperty("one");
        firstCol.setCellFactory(cellFactory);

        TableColumn secondCol = new TableColumn("Name");
        secondCol.setPrefWidth(200);
        secondCol.setSortAscending(true);
        secondCol.setProperty("two");

        TableColumn thirdCol = new TableColumn("Call");
        thirdCol.setPrefWidth(60);
        thirdCol.setProperty("three");
        thirdCol.setCellFactory(cellFactory);

        TableColumn fourthCol = new TableColumn("Email");
        fourthCol.setPrefWidth(60);
        fourthCol.setProperty("four");
        fourthCol.setCellFactory(cellFactory);

        contactOptions.setItems(addContactOption);
        contactOptions.getColumns().addAll(firstCol, secondCol, thirdCol, fourthCol);
        contactOptions.setPrefSize(400, 200);

        root.getChildren().add(contactOptions);
        primaryStage.setScene(scene);
        primaryStage.setVisible(true);
    }

    public static class ContactOptions {

        private final StringProperty one;
        private final StringProperty two;
        private final StringProperty three;
        private final StringProperty four;

        ContactOptions(String col1, String col2, String col3, String col4) {
            this.one = new StringProperty(col1);
            this.two = new StringProperty(col2);
            this.three = new StringProperty(col3);
            this.four = new StringProperty(col4);
        }

        public String getOne() {
            return one.get();
        }

        public String getTwo() {
            return two.get();
        }

        public String getThree() {
            return three.get();
        }

        public String getFour() {
            return four.get();
        }
    }
}

差不多了

致电之前commitEdit,需要调用getTableView().edit(getTableRow().getIndex(), param)。这会将单元格置于“编辑模式”。既然没有startEdit方法,进入编辑模式涉及的很少,但仍然是必需的。

之后,如下所述:http://download.oracle.com/javafx/2.0/ui_controls/table-view.htm http://download.oracle.com/javafx/2.0/ui_controls/table-view.htm

有必要打电话

firstCol.setOnEditCommit(new EventHandler<EditEvent<String>>() {
    @Override
    public void handle(EditEvent<String> event) {
        String newValue = event.getNewValue();
        ContactOptions data = (ContactOptions) event.getTableView().getItems().get(event.getTablePosition().getRow());
        data.one.set(newValue)
        if(newValue.equals("No")) {
            data.three.set("No");
            data.four.set("No");
        }
    }
}

现在我需要知道的是数据更新后如何更新表的显示 https://stackoverflow.com/questions/7237714/javafx-2-tables-update-display-after-having-updated-data.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 2:获取 TableCell 行索引 的相关文章

  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 如何在远程 WebSphere 上进行 JNDI 查找期间解决 sun/io/MalformedInputException

    我使用 WebSphere 8 5 来托管我的应用程序 并在应用程序服务器上配置了一些 JDBC 资源 我还使用瘦客户端运行时库开发了一个客户端应用程序 当按以下方式执行 JNDI 查找时 env put Context INITIAL C
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • Spring3/Hibernate3/TestNG:有些测试给出 LazyInitializationException,有些则没有

    前言 我在单元测试中遇到了 LazyInitializationException 的问题 而且我很难理解它 正如你从我的问题中看到的那样Spring 中的数据库会话 https stackoverflow com questions 13
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分

随机推荐

  • Ruby on Rails Michael Hartl 第 3 章错误

    我在 Michael Hartl 的 RoR 教程中不断遇到此错误 是的 我用谷歌搜索了这个问题 看到它被回答了几次 我尝试了提供的解决方案 但他们没有解决问题 这是错误 ec2 user environment sample app st
  • 一元对元组的改变

    我正在寻找一个类似于以下类型的函数 Monad m gt a b gt b gt m c gt m a c 在我看来 它是绑定的某种组合 gt gt 和镜头操作 我知道我可以在绑定后通过模式匹配来解决这个问题 但我的直觉告诉我有一种 更简单
  • Firemonkey android read_phone_state运行时权限要求获取IMEI

    如何在运行时获得 read phone state 权限以获取 IMEI 号码 if not HasPermission android permission READ PHONE STATE then begin ASK AND GET
  • 如何在 Typescript 中使用 redux-thunk 通过 ThunkAction 正确输入 thunk?

    我正在尝试输入检查我的redux thunk使用 Typescript 编写代码 来自 Redux 官方文档 与 Redux Thunk 一起使用 https redux js org recipes usage with typescri
  • NSManagedObject 子类重复声明

    因此 当我的数据模型准备就绪时 我尝试在数据模型文件打开时生成子类 编辑器 gt 创建 NSManaged 对象子类 好了 生成了两个文件 一个是类声明 一个是属性 然而 我立即被提示我重新声明了一个已经存在的类 这是原始生成文件的位置 先
  • USB_DEVICE_ATTACHED 意图未触发

    有没有人能够让 android hardware usb action USB DEVICE ATTACHED 工作 好的 我正在尝试使用新的 USB 主机模式功能来检测 USB 设备何时连接 出于我的目的 我希望在连接设备时收到通知 我没
  • 在批处理结束时检测到不可提交的事务。事务被回滚

    我们在服务器迁移方面遇到问题 我们有一个应用程序 这么多事务在一台数据库服务器上运行良好 但是当将相同的数据库传输到另一台服务器时 我们面临以下错误 Server Msg 3998 Level 16 State 1 Line 1 Uncom
  • http - 更改请求网址?

    是否可以在不重定向的情况下更改 HTTP 请求的 url 例如代替 要求1 GET user abc123 HTTP 1 1 HTTP 1 1 301 Moved Permanently Location files abc123 要求2
  • ios webkit 中的 touchend 事件未触发?

    我正在尝试为基于 ios webkit 的应用程序实现一个菜单 其中用户触摸 单击并按住菜单按钮 menu item 500 毫秒后子菜单打开 div slide up sub menu 并且用户应该能够将手指 鼠标滑动到子菜单项并释放 l
  • Tapestry 4:资源缓存控制?

    我使用 Tapestry 4 每当我们推送更改任何资产 图像 样式表 JS 库 的版本时 我们都会遇到问题 因为用户的浏览器缓存中仍然有旧版本的资产 我想设置一些简单的方法来允许缓存 但在更新应用程序时强制下载新的资产 简单地完全禁止资产缓
  • 当列表数据发生变化时更新Android ListActivity?

    我想知道如何刷新ListActivity当我更改 添加数据时 我首先想到的是ListAdapter会知道列表何时更改 但是当我向列表添加元素时 列表上没有更新ListActivity 只有当我关闭 ListActivity 并再次重新打开它
  • 本地化 ASP.NET MVC 2 中的错误消息(默认验证属性)

    我正在开发一个多语言网站 我想本地化大多数 ValidationAttribute 的验证错误消息 例如 Requried 我知道可以这样做菲尔 哈克 http haacked com已在此显示article http haacked co
  • 类型提示和@singledispatch:如何以可扩展的方式包含 `Union[...]`?

    我正在重构一个转换各种日期格式的函数 即 ISO 8601 字符串 datetime date datetime datetime等 转换为 Unix 时间戳 我想要使 用新功能 singledispatch而不是类型检查 但我不知道如何保
  • 如何在Python中获取图像的信噪比?

    我正在过滤图像 我想知道信噪比 我尝试使用 scipy 函数 scipy stats signaltonoise 但我得到了一个数字数组 但我真的不知道我得到了什么 还有其他方法可以获得图像的信噪比吗 UPDATE 对于那些不阅读评论中链接
  • Sublime text:向新的语言定义添加符号(语法突出显示)

    我在 sublime text 2 中为一种稍微陌生的语言 Cadence SKILL 编写了语法突出显示 它的工作方式就像一个魅力 但是我怀念 CTRL R 的功能 它以一种易于访问的方式找到当前文件中的所有符号 函数 任何人都可以建议如
  • SQL查询有特定的执行顺序吗?

    我对 SQL 查询的执行顺序感到困惑 例如 Inner join in MySQL在下面的代码中 之间WHERE条款和SELECT FROM子句 哪一个首先被解释和执行 也就是说 下面的查询是否带来 全部tables data首先找到与以下
  • 从上到下滚动列并用上面单元格中的值替换 0

    我必须从上到下滚动一列 实际上是两列 但如果我能得到一列 我就可以管理 并替换0或上面有单元格值的空白 这是我到目前为止所拥有的 它不起作用 Sub ReplaceZeros Application ScreenUpdating False
  • 如何根据 mongodb (mongoose) 中填充的对象对元素进行排序

    我有一个两个模式的钱包和用户 用户架构 var schema new mongoose Schema first name type String wallet id type mongoose Schema Types ObjectId
  • 如何向客户交付 iOS 应用程序 IPA,以使用他们自己的企业配置文件进行签名

    我们开发了一款 iOS 应用程序 已作为 IPA 交付给客户 并具有临时分发配置文件 允许一组员工将其安装在他们的设备上 客户现在希望使用其 iOS 企业开发人员计划凭据将该应用程序在内部分发给所有员工 我原本希望客户可以简单地重新设计带有
  • JavaFX 2:获取 TableCell 行索引

    我有一个带有复选框的表 当我单击第三列或第四列中的复选框时 我想更改第一列中复选框的选择 我希望能够更改同一行上的其他单元格 我已经有了列 所以我想知道单元格位于哪一行 我也非常不确定到目前为止是否正确 到目前为止我所做的大部分是来自 ht