【问题标题】:Retrieving specific item from a JList从 JList 中检索特定项目
【发布时间】:2013-08-03 09:29:26
【问题描述】:

我有一个 JXHyperlinks 列表,我需要一一检索它们并添加到面板中

代码是:

for(int i=1; i<=lcol-1;i++)
{
    a2=sheet.getCell(i,0);
    stringy=a2.getContents();
    testlink= new JXHyperlink(new Action(stringy));
    list.add(testlink);

}
for(int i=0;i<list.getModel().getSize();i++)
{
    panel2.add(list.getModel().getElementAt(i));

}

第一个循环是创建具有各自名称的链接列表(取自 Excel 文件)。 第二个循环采用预先制作的列表并将每个对象添加到面板中。 问题是 id 没有添加它们。

【问题讨论】:

  • panel2 更有可能被遮蔽或未添加到显示的组件中
  • 不。如果我在这个函数之前添加组件,比如按钮和文本区域,它会起作用,但我之后添加的任何东西都不起作用。
  • 为什么?通常组件添加到列表(树、表..)

标签: java swing jlist defaultlistmodel


【解决方案1】:

您将ListJList 混淆了。 List#add 是从 Collection 继承而来的,它给自己添加了一个 Object。 JList#add 继承自 Container 并将组件添加到 Container。所以 Jlist#add 它就像 JPanel#add

【讨论】:

    【解决方案2】:

    问题是,您将JXHyperlink 组件直接添加到列表中,而不是列表模型中。

    for(int i=1; i<=lcol-1;i++)
    {
        a2=sheet.getCell(i,0);
        stringy=a2.getContents();
        testlink= new JXHyperlink(new Action(stringy));
        // I'm the JList, not it's model :P
        list.add(testlink);
    }
    // I bet nothing exists in the model
    for(int i=0;i<list.getModel().getSize();i++)
    {
        panel2.add(list.getModel().getElementAt(i));
    }
    

    这不是列表的工作方式。

    相反,将链接String 添加到ListModel 并使用JXHyperlink 作为ListCellRenderer 的基础,然后将JXHyperlink 的实例添加到列表中每个String 的面板中

    请参阅How to use lists 了解更多详情,尤其是Creating a modelWriting a Custom cell Renderer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 2012-11-06
      • 2011-10-14
      • 2011-09-14
      相关资源
      最近更新 更多