【问题标题】:Arraylist to JLabel [duplicate]Arraylist 到 JLabel [重复]
【发布时间】:2018-12-09 11:08:19
【问题描述】:

我正在尝试将 arraylist 内容打印到 Jlabel 中,但问题是它只显示我添加的最后一个整数,如果有人可以帮助我吗?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    for(int i = 0; i < list.size(); i++){
        jLabel1.setText(list.toString());
    }

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    list = new ArrayList<Integer>();
    int a = Integer.parseInt(jTextField1.getText());
    list.add(a);
}

【问题讨论】:

  • 为什么jButton2方法每次都新建列表?

标签: java arrays swing jlabel


【解决方案1】:

您不需要在循环中为list 的每个元素添加list.toString

for(int i = 0; i < list.size(); i++){
   jLabel1.setText(list.toString());
}

上面的循环应该简单地替换为

jLabel1.setText(list.toString());

这会将list的所有内容添加到jLabel1

为什么你只得到最后一个元素? 由于您每次都在方法jButton2ActionPerformed 中创建一个新的ArrayList,并且随后只向这个新创建的列表中添加一个元素,因此您只会获得jLabel1 中的最后一个元素

您需要有一个仅创建一次(仅初始化一次)的列表,并且每次调用jButton2ActionPerformed 都应将add 元素指向现有列表(而不是每次都创建一个新的)。

【讨论】:

  • 伟大的思想都一样。 +1。
【解决方案2】:

您将JLabel 的文本设置为包含列表所有内容的文本的代码是正确的。如果只显示一个数字,要么是因为标签太小,要么是因为列表只包含一个数字。

你不需要for 循环,因为list.toString() 会生成一个包含所有内容的字符串,即使你只调用它一次。但它也应该适用于多个调用,即 for 循环。

您的问题是您要为每次按下按钮创建一个新列表。这会导致您丢失前一个列表的所有内容,只保留添加的新号码。所以不要那样做。在您的程序启动时或在适当的时候创建一次列表。

【讨论】:

  • 是的,你是对的,伟大的思想都一样 :) 但我宁愿称我为初学者 ;)
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 2018-08-19
  • 2021-07-02
相关资源
最近更新 更多