当我尝试将字符串写入文件时,我在获取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 +在我的customCellRenderer实现中使用“-” +文本),以便使我能够将“-” char用作delim来提取两个值

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

最佳答案

您发布的不是ListModel,而是ListCellRenderer。但这确实加强了这样的观念,即您JList中的每个项目都是一个String[]-例如您正在将JList中的每个值转换为String[]进行渲染。

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]);


但是,我真的不鼓励这样做,因为您将拥有未经检查的类强制转换。

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

JList myList = new JList(new String[]{"A","B"}, new String[]{"C","D"});

关于java - JList/ListModel getElements不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10749783/

10-09 03:25