0

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

[Ljava.lang.String;@79b43f[Ljava.lang.String;@79b43f

那我做错了什么?这是导致悲伤的代码:

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 是我制作的一个自定义列表模型。你可能会注意到我已经拆分了字符串,这是因为我想从每个列表行中提取两个不同的值,我只是完成了 setText(text + "-" + text) 在我的 customCellRenderer 实现中,以便使我能够使用 "-" 字符作为分隔符来提取两个值

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;
    }
}
4

2 回答 2

1

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

于 2012-05-25T07:30:58.530 回答
1

你发布的不是ListModel- 它是ListCellRenderer。但这确实强化了您的每个项目JList都是 a的想法String[]- 例如,您将每个值转换JList为 aString[]以进行渲染。

String leftData = ((String[])value)[0];
String rightData = ((String[])value)[1];

似乎在ListModel填充的位置存在一些混淆。您的帖子/代码表明您认为它正在被填充ListCellRenderer- 事实并非如此。它只是在研究如何显示ListModel.

因此,可以在“让您感到悲伤的代码”中快速修复:

String[] temp = (String[]) listModel.getElementAt(i);
bw.write(temp[0]);
bw.write(temp[1]);

但是,我不会真正鼓励这样做,因为您将拥有未经检查的班级演员表。

相反,我建议您首先考虑为什么要填充ListModelwith String[]?例如,您是否构建JList如下:

JList myList = new JList(new String[]{"A","B"}, new String[]{"C","D"});
于 2012-05-28T07:53:52.853 回答