我想要实现的目标是JLabel
显示List
中的多个项目。
我已经将列表定义如下,但是当我测试代码时,我的方法迭代列表,点击一下按钮后,只显示列表中的最后一项 {{1} }。
我想在每个按钮点击一个"DONE!"
后完成在列表中显示仅下一个项目。
JLabel
答案 0 :(得分:1)
您当前的代码总是覆盖JPanel中的当前文本,并且它执行速度非常快,您没有看到它。不是使用Iterator,而是通过定义每次按下增加的int变量来获取列表中的下一个项目。
在此示例中,index
变量是一个公共int:
jLabel1.setText(strings.get(index));
if (index < strings.size()-1)
index++;
没有循环,这是您方法中所需的一切。
答案 1 :(得分:0)
为了从集合中找到下一个字符串,您需要知道当前项目。
一种方法是将索引(或迭代器)存储在字段中:
List<String> strings=<...>
// 1. store index
int sentenceIndex = 0;
// 2. store iterator. You could get ConcurrentModificationException if change list and then use iterator.
Iterator<String> iterator = strings.getIterator();
private void buttonpressActionPerformed() {
// 1. use index.
if (sentenceIndex < strings.size()-1) { // avoid IndexOutOfBoundException
String nextSentence = strings.get(sentenceIndex++);
}
// 2. use iterator
if (iterator.hasNext()) {
String nextSentence = iterator.next();
}
但实际上你不需要存储东西:
// 3. calculate current index
String currentSentence = jLabel1.getText();
int currentIndex = strings.indexOf(currentSentence);
int nextIndex = incrementIndex(currentIndex);
String nextSentence = strings.get(nextIndex );
请注意,我建议使用新方法incrementIndex
。在其中你不仅可以添加长度检查,还可以添加从最后一个元素跳到第一个元素或只是随机选择。
每种方法都有pro和contras:
索引计算也需要边界检查,label1
应该有正确的初始值
我更喜欢存储索引,但这是您的选择