簡體   English   中英

將 ArrayList 打印到 JLabel 不在 GUI 上打印

[英]Printing ArrayList to JLabel not printing on GUI

我目前面臨一個問題,我有一個問題的答案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);
}

您的代碼存在一些問題:

  1. setBounds告訴我們您正在使用null-layout ,請參閱: 為什么在 Swing 中使用 null 布局不受歡迎? 如果這還不足以說明使用它的問題是什么,這里有一個例子 而是使用布局管理器,讓 Swing 為您計算

  2. 每次for進行迭代時,您都會在JLabel上調用setText ,這會覆蓋您在上一次迭代中所擁有的內容,因此您有 2 個選項:

  • 在每次迭代時創建一個新的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和 append 的單個實例,將所有文本都添加到它,然后使用該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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM