当前位置: 首页 > 知识库问答 >
问题:

JAVAFX ListView-是否可以隐藏ID'column',或者应该使用单个列tableView?

暴博远
2023-03-14

在MS Access中,'ListBox'可以隐藏一个2列结果集的第一个'column'--它非常适合隐藏'ID',当用户从列表中选择一个项目时,IDS很容易访问。

如果可能的话,我希望在JavaFX中用ListView做同样的事情,这样我就可以根据第一个ListView中的选择填充第二个ListView。

以下是我填充ListView的方式:menulist1.setItems(MenuUtilities.getDivisions());

public static ObservableList getDivisions() {

    ObservableList divisionListRow = FXCollections.observableArrayList();
    try {
        Connection conn;
        conn = Connect_db.getConnection();
        String query = "SELECT ID, Division FROM tbl_ref_employee_divisions";
        PreparedStatement prestate = conn.prepareStatement(query);
        ResultSet divsResult = prestate.executeQuery();
        while (divsResult.next()) {

            for (int i = 1; i <= divsResult.getMetaData().getColumnCount(); i++) {
                divisionListRow.add(divsResult.getString(i));
            }
        }
        prestate.close();
        divsResult.close();
        conn.close();

    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    return divisionListRow;
}

多谢

共有1个答案

丁书
2023-03-14

您访问resultset的方式是为每一行为每列添加一个元素。您需要为要在ListView中显示的每一行添加一个项目,即在本例中,在ResultSet中每一行添加一个项目。

因为您希望ID是可访问的,所以应该创建一个自定义类型,包含两行的值(或者使用现有的类,如pair),并使用cellfactory选择要显示的数据。

public class EmployeeDivision {
    private final long id; // or maybe String/int as type?
    private final String name;

    public EmployeeDivision (long id, String name) {
        this.id = id;
        this.name = name;
    }

    /* getters */

}
ListView<EmployeeDivision> menuList1;
menuList1.setCellFactory(lv -> new ListCell<EmployeeDivision>() {
    @Override
    protected void updateItem(EmployeeDivision item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty || item == null ? "" : item.getName());
    }
});
while (divsResult.next()) {
    divisionListRow.add(new EmployeeDivision(divsResult.getLong(1), divsResult.getString(2)));
}

这允许您访问所选项目的id,如下所示:

EmployeeDivision selectedItem = menuList1.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
    System.out.println("id = " + selectedItem.getId());
} else {
    System.out.println("no item selected");
}
 类似资料:
  • AccessibilityService在系统的内存管理方面与普通服务有何不同? 我想问的是:系统可以为了节省内存而关闭AccessibilityService吗?如果可以,当您进入AccessibilityService时,您会看到它打开还是关闭?用户是否必须再次手动打开? 使用startForeground是否有助于使AccessibilityService保持活动状态? 在一个类似的问题中,

  • 问题内容: 如果HTML元素样式的属性设置为,它是否仍可单击? 当该属性设置为时,该元素甚至都不是DOM树的一部分,因此这不是问题。但是我想知道一个元素是否仍然响应鼠标事件。 问题答案: 随着它 是 仍然DOM的一部分。只是没有在视口中渲染。 至于点击元素,则 不会 触发事件。

  • 问题内容: 我想在显示旨在在建筑大厅中显示信息的网页时隐藏光标。它根本不需要是交互式的。我尝试使用cursor属性和透明的光标图像,但是没有使它起作用。 有人知道这是否可以做到吗?我想这对于不知道他在哪里单击的用户来说可以看作是安全威胁,所以我不太乐观……谢谢! 问题答案: 使用CSS: 一个例子: 要在Javascript中的元素上设置此属性,可以使用属性: 如果要对整个身体进行设置: 但是,请

  • 问题内容: 这是我的代码,我基本上只是为最常见的侦听器做了一个测试器,以后我可能会在以后的项目中使用它,主要的问题是在底部的键侦听器中,我试图重新显示框架,但我认为只是无法做到这一点,请帮助ps:不知道为什么进口不正确。 } 问题答案: 可见组件可以具有键盘焦点,并且可以接收键盘和其他输入事件,但是不可见组件不能具有焦点,也不能接收输入事件。使框架不可见时,它停止接收输入事件,包括所有要添加的组件

  • 寻找Reactor调度程序的指导。 我想在后台运行某些IO任务,即向技术团队发送电子邮件。为了使其异步,我使用Mono。fromRunnable订阅了调度程序。 我可以选择使用 Schedulers.elastic() 或 Schedulers.newElastic()。我更喜欢后者,因为它允许我给它一个唯一的名称,这将有助于日志分析。 做一个静态变量可以吗? 在Mono上订阅它,而不是每次都要创

  • 问题内容: 是否可以取消使用隐藏iframe的文件上传? 我尝试将iframe的源设置为空字符串,但上传并未中断。 问题答案: iframe是承载表单过帐的传输渠道,因此Atanas是正确的,您必须停止iframe内部的传输。 这是一种取决于浏览器的方法: