首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JList/ListModel getElements不工作

JList/ListModel getElements不工作
EN

Stack Overflow用户
提问于 2012-05-25 14:50:39
回答 2查看 544关注 0票数 0

我在获取ListModel的所有元素时遇到了问题,当我尝试将字符串写入文件时,它们会输出类似以下内容:

代码语言:javascript
复制
[Ljava.lang.String;@79b43f[Ljava.lang.String;@79b43f

那么我到底做错了什么呢?下面是导致悲痛的代码:

代码语言:javascript
复制
for (int i = 0; i < listModel.getSize(); i++)
        {
            String[] temp = listModel.getElementAt(i).toString().split("-");
            bw.write(temp[0]);
            bw.write(temp[1]);

            System.out.println(temp[0]);
        }

bw是一个bufferedWriter,listModel是我制作的一个自定义列表模型。您可能注意到我拆分了字符串,这是因为我想从每个列表行提取两个不同的值,我只是在customCellRenderer实现中执行了setText(text + "-“+ text),以便能够使用"-”字符作为派生符来提取这两个值

代码语言:javascript
复制
public class CustomCellRenderer extends JLabel
implements ListCellRenderer
{
    JLabel left, right;
}

public CustomCellRenderer() 
{
    setOpaque(true);
}

@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{        
    String leftData = ((String[])value)[0];
    String rightData = ((String[])value)[1];

    // simply will not function how i want it to.. GRR
    leftData = String.format("%-50s", leftData);


    setText(leftData + "-   " + rightData);

    if (isSelected)
    {
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
    }
    else
    {
        setBackground(list.getBackground());
        setForeground(list.getForeground());
        setBackground(list.getBackground());
        setForeground(list.getForeground());
    }

    return this;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-28 15:53:53

你发布的不是ListModel,而是ListCellRenderer。但这确实强化了这样一个想法,即JList中的每个项目都是一个String[] -例如,您将JList中的每个值转换为String[]以进行呈现。

代码语言:javascript
复制
String leftData = ((String[])value)[0];
String rightData = ((String[])value)[1];

对于ListModel的填充位置,似乎存在一些混淆。您的post/代码表明您认为它正被填充到ListCellRenderer中-事实并非如此。它只是在研究如何显示ListModel中已经存在的值。

所以,可以在“给你悲伤的代码”中找到一个快速的解决办法:

代码语言:javascript
复制
String[] temp = (String[]) listModel.getElementAt(i);
bw.write(temp[0]);
bw.write(temp[1]);

然而,我并不鼓励这样做,因为你会有未经检查的类类型转换。

相反,我建议您首先考虑一下为什么要用String[]填充ListModel?例如,您是否按如下方式构建JList

代码语言:javascript
复制
JList myList = new JList(new String[]{"A","B"}, new String[]{"C","D"});
票数 1
EN

Stack Overflow用户

发布于 2012-05-25 15:30:59

在您的自定义列表模型中,listModel.getElementAt(i)返回一个数组。如果您需要进一步的帮助,请检查并在此处发布您的自定义列表模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10749783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档