gpt4 book ai didi

java - JList/ListModel getElements 不起作用

转载 作者:行者123 更新时间:2023-12-02 07:46:33 41 4
gpt4 key购买 nike

我在获取 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;
}
}

最佳答案

您发布的不是 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]);

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

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

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

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

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com