我目前面临一个问题,我有一个问题的ArrayList
答案,我正试图将每个答案打印到JLabel中,因为这将显示添加到题库中的问题。
问题是它只会打印一个答案,并且数组中可能存储了5个答案。它正在将它打印到控制台上,我已经尝试将this.add(answerLabel);
放入for循环内部和外部。
我这样做是最好的方式吗?
answerLabel = new JLabel();
answerLabel.setBounds(100, 100, 300, 300);
for (int i = 0; i < answers.size(); i++) {
answerLabel.setText("Answer " + i + ": " + answers.get(i));
System.out.println("Answer " + i + ": " + answers.get(i));
this.add(answerLabel);
}
您需要考虑的是,一旦添加了前一个,就创建一个新的JLabel
实例
answerLabel = new JLabel();
answerLabel.setBounds(100, 100, 300, 300);
for (int i = 0; i < answers.size(); i++) {
answerLabel.setText("Answer " + i + ": " + answers.get(i));
System.out.println("Answer " + i + ": " + answers.get(i));
this.add(answerLabel);
answerLabel = new JLabel();
answerLabel.setBounds(100, 100, 300, 300);
}
您的代码存在一些问题:
-
setBounds
告诉我们您正在使用null-layout
,请参阅:为什么在Swing中使用空布局不受欢迎?如果这还不足以说明使用它的问题,这里有一个例子。相反,使用布局管理器,让Swing为您进行计算 -
每次
for
进行迭代时,您都会在JLabel
上调用setText
,这将覆盖上一次迭代中的内容,因此您有两个选项:
-
在每次迭代上创建
JLabel
的新实例JPanel pane = new JPanel(); pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS)); for (int i = 0; i < answers.size(); i++) { answerLabel = new JLabel(); answerLabel.setText("Answer " + i + ": " + answers.get(i)); pane.add(answerLabel); } this.add(pane);
-
创建一个
String
的实例,并将所有文本附加到其中,然后用String
的值在JLabel
上调用setText
一次String text = ""; for (int i = 0; i < answers.size(); i++) { text += "Answer " + i + ": " + answers.get(i) + "n"; //Replace this for a StringBuilder, just making this an example } answerLabel.setText(text); this.add(answerLabel);