我在抓取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 (custom +“ - ”+ 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;
}
}
答案 0 :(得分:1)
在自定义列表模型中,listModel.getElementAt(i)返回一个数组。如果您需要进一步的帮助,请在此处查看并发布您的自定义列表模型。
答案 1 :(得分:1)
您发布的内容不是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"});