我不是GUI或swing编程的新手,就像免责声明一样。
在我的扩展JPanel的类中,我有一个ArrayList<字符串>我想用来创建JLabel的opponentNames。我有一个ArrayList< JLabel>包含JLabel的标签。我使用了这个列表,并且我试图直接添加到框架,这就是为什么两者都在下面的代码块中。我知道我应该使用一个。
for(String s : opponentNames){
JLabel label = new JLabel(s);
label.setVisible(true);
labels.add(label);
this.add(label);
}
然后我在不使用我的ArrayList<的情况下以相同的方式添加测试JLabel。字符串>:
for(int i = 0; i < 5; i++){
JLabel label = new JLabel(""+i);
label.setVisible(true);
labels.add(label);
this.add(label);
}
这会为我的面板添加5个JLabel。
后来我尝试添加所有的ArrayList&lt; JLabel&gt;再次向专家组贴上标签:
for(JLabel l : labels){
System.out.println(l.getText());
System.out.println(l.isVisible());
this.add(l);
}
在控制台中,每个标签都打印出正确的文本(数字和来自ArrayList的字符串&lt; String&gt; opponentNames)但屏幕上显示的唯一内容是JLabels 0 ...... 4,两次。
TL; DR:我的所有JLabel都存在且设置可见,但屏幕上只显示了一些。
编辑:我有一个拼写错误:应该是label.setVisible(true);在第一个for循环中。这里的代码没有复制和粘贴,大大简化了。那是/我的代码中的错误。
edit2:这是可运行的代码。当然,当我测试它时,我的问题不会发生在这里,所以这告诉我在我的代码中的其他地方存在问题。
import javax.swing.JFrame;
public class JLabelTestMain {
public static void main(String[] args) {
TestJLabelCode panel = new TestJLabelCode();
JFrame frame = new JFrame();
frame.setContentPane(panel);
frame.pack();
frame.validate();
frame.setVisible(true);
frame.setDefaultCloseOperation(3);
}
}
然后是另一个班级:
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestJLabelCode extends JPanel{
private ArrayList<String> opponentNames;
private ArrayList<JLabel> labels;
public TestJLabelCode(){
opponentNames = new ArrayList<String>();
labels = new ArrayList<JLabel>();
opponentNames.add("client1");
opponentNames.add("client2");
opponentNames.add("client3");
opponentNames.add("client4");
opponentNames.add("client5");
for(String s : opponentNames){
JLabel label = new JLabel(s);
label.setVisible(true);
labels.add(label);
this.add(label);
}
for(int i=0; i<5; i++){
JLabel label = new JLabel(""+i);
label.setVisible(true);
labels.add(label);
this.add(label);
}
for(JLabel label : labels){
System.out.println(label.getText());
System.out.println(label.isVisible());
add(label);
}
}
}
答案 0 :(得分:0)
我发现了我的错误来源。这是一个非常大的网络游戏的一小部分。我不小心创建了这个面板两次。我正在重新绘制它的第一个实例,它是在没有客户端/对手名称的情况下初始化的,即使我正在更新它的第二个实例。控制台中的print语句来自第二个实例,而第一个实例是唯一显示的实例。
感谢@HovercraftFullOfEels和@Zhedar的帮助。