【问题标题】:Printing ArrayList to JLabel not printing on GUI将 ArrayList 打印到 JLabel 不在 GUI 上打印
【发布时间】:2021-07-02 08:12:25
【问题描述】:

我目前面临一个问题,我有一个问题的答案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);
}

【问题讨论】:

    标签: java swing user-interface arraylist


    【解决方案1】:

    您需要考虑的是在添加前一个实例后创建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);
    }
    

    【讨论】:

      【解决方案2】:

      您的代码存在一些问题:

      1. setBounds 告诉我们您正在使用null-layout,请参阅:Why is it frowned upon to use a null layout in Swing?,如果这还不足以说明使用它的问题,这里有一个example。而是使用 layout managers 并让 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 的单个实例并将所有文本附加到其中,然后使用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);
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 2015-10-30
        • 2023-03-22
        • 2014-05-05
        • 2014-06-29
        • 1970-01-01
        相关资源
        最近更新 更多