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

如何从JList获取Index n的COMPONENT(不是数据)

申屠项明
2023-03-14

我通过向它传递一个数据数组来创建一个JList

public class MyJList extends JList() {
...

   public MyJList(final Object[] listData) {
       super[listData];
   }

我使用ListCellRenderer渲染此列表,它为每个项目提供了一个组件,可以根据业务逻辑启用或禁用该组件。

当我尝试通过键盘箭头导航时,问题就来了。我希望跳过禁用的项目。(在适当的方向上继续下一个)我必须使用键盘管理器,因为 UI 会根据在列表中选择的项目来更改某些内容。麻烦的是,在键盘侦听器中,我无法获取具有所选索引的项目的组件。此组件不归 JList 所有,并且调用 MyJList.getComponent(index) 失败,并显示 ArrayIndexOutOfBoundsException。1 是一个太大的索引,即使我可以看到七个项目,其中四个项目已启用。

如何通过编程从JList中按索引检索组件以确定其是否已启用?唯一似乎返回组件的接口是GetListCellRenderComponent()-它更改组件的显示。我只是想让组件看看它是否被启用。

共有1个答案

景修杰
2023-03-14

JList 不包含任何组件。呈现器返回的组件仅用作图章,但实际上并不包含在 JList 中。

您可以在表教程的“渲染器和编辑器”部分找到所有这些解释。虽然它对表进行了解释,但它也适用于JList

如果你想获得某个索引的“组件”,你只需要使用渲染器并向它请求一个组件。在< code > JList # getTooltipText 的源代码中可以看到这样一个例子:

public String getToolTipText(MouseEvent event) {
    if(event != null) {
        Point p = event.getPoint();
        int index = locationToIndex(p);
        ListCellRenderer<? super E> r = getCellRenderer();
        Rectangle cellBounds;

        if (index != -1 && r != null && (cellBounds =
                           getCellBounds(index, index)) != null &&
                           cellBounds.contains(p.x, p.y)) {
            ListSelectionModel lsm = getSelectionModel();
            Component rComponent = r.getListCellRendererComponent(
                       this, getModel().getElementAt(index), index,
                       lsm.isSelectedIndex(index),
                       (hasFocus() && (lsm.getLeadSelectionIndex() ==
                                       index)));

            if(rComponent instanceof JComponent) {
                MouseEvent      newEvent;

                p.translate(-cellBounds.x, -cellBounds.y);
                newEvent = new MouseEvent(rComponent, event.getID(),
                                          event.getWhen(),
                                          event.getModifiers(),
                                          p.x, p.y,
                                          event.getXOnScreen(),
                                          event.getYOnScreen(),
                                          event.getClickCount(),
                                          event.isPopupTrigger(),
                                          MouseEvent.NOBUTTON);

                String tip = ((JComponent)rComponent).getToolTipText(
                                          newEvent);

                if (tip != null) {
                    return tip;
                }
            }
        }
    }
    return super.getToolTipText();
}
 类似资料:
  • 我通过JFileChooser使用下面这段代码将一个名为test.xml的文件添加到我的JList中; 现在我必须从Jlist中选择一个文件,然后将它转换成另一个文档。如果我给出输入,转换步骤就会起作用; 但是如果我给它,它就不起作用; 列表及其向量使用以下代码段创建: 你们谁能告诉我如何从JList中选择该特定文件来进行转换吗?提前感谢…!

  • 我在Netbeans构建了一个Java项目。我有一个表单,表单内部有一个jList,其中填充了一个对象(Favorite)。我也有一个按钮,我想当我按下按钮删除选定的项目在jList。 我正在尝试以下代码,但我得到一个错误。 我得到以下错误: 线程“AWT-EventQueue-0”中出现异常Java . lang . classcastexception:Java . lang . string

  • 我想获取日期字段,但下面的代码没有这样做。Toast显示null(字符串日期的值)。 公共字符串日期;

  • 我正在创建一个屏幕,上面有四个列表。基本上是两对列表,您可以在对中的一个列表上选择行,然后将它们移动到对中的另一个列表。 查看文档,我需要为每个列表提供一个ListSelectionModel来确定选择了哪些行。我将使用[Sel]或[Des]按钮来执行实际的传输。 文档和示例说我需要一个ListSelectionListener,但是,由于在用户单击按钮之前我不会访问模型,所以我实际上需要一个监听

  • 在db.js中有一个代码片段,如下所示, 并且我想获得当我在app.js中调用函数时的结果数据,如下所示。 正如您所看到的,当我试图从db.js获取数据时,它在控制台窗口中显示“the data is undefined”。我该如何解决这个问题?有什么建议吗?

  • 问题内容: 我有一个ResultSet返回不同类型的数据。该查询是动态构造的,因此在编译时,我不知道查询将返回哪种类型的值。 假设所有结果都是字符串,我编写了以下代码。但是我也想获取每个值的类型。我怎样才能做到这一点? 以下是我编写的代码。 此时,我想获取列类型,并根据数据类型获取值。 问题答案: 所述返回一个指定列类型值发现。 例: