【问题标题】:Printing arraylist elements in textfield在文本字段中打印数组列表元素
【发布时间】:2016-08-25 09:57:57
【问题描述】:

实际上,我想在 textfield1 中显示 arraylist 的第一个元素,在 textfield 2 中显示它的下一个元素,我希望它在按下按钮时保持旋转。问题是它一直显示两个文本字段中的最后一个元素

public class Teams
{
    String[] P={"Hi","there","you"};
}

Teams tm=new Teams();
for(int j=0;j<=tm.P.length; j++){
   textfield1.setText(tm.P[j]);
   textfield2.setText(tm.P[j+1]);
}

【问题讨论】:

  • 除了你的问题不清楚之外,这段代码甚至不会编译。
  • 发布完整代码。为什么要迭代整个列表/数组?
  • 什么是类Teams,什么是Teams.P
  • @Blip 抱歉,已发布 Teams 课程
  • 请更正textField.setText的代码 我感觉你漏掉了函数的右括号。

标签: java arraylist jtextfield


【解决方案1】:

根据我从您的代码中得到的信息:

public class Teams{
    String[] P={"Hi","there","you"};
}

另一个类

 //Inside some function in another class   
 Teams tm=new Teams();
 for(int j=0;j<=tm.P.length; j++){
    textfield1.setText(tm.P[j]);
    textfield2.setText(tm.P[j+1]);
 }

Teams 类中的变量 P 的长度为 3。因此在代码 sn-p 下方,j 的值从 0 变为 3。在 j 的值为 2 的情况下行

textfield2.setText(tm.P[j+1]);

应该将ArrayIndexOutOfBoundsException 作为索引j+1 抛出,即P 不存在3。

同样当P 的值为3 时,两行

 textfield1.setText(tm.P[j]);
 textfield2.setText(tm.P[j+1]);

应该抛出一个ArrayIndexOutOfBoundsException,因为P 的索引对于第一行是3,对于第二行是4。

既然你已经在你的 cmets 中明确声明没有抛出异常,我觉得这段代码必须在一个 try - catch 块内,该块捕获 Exception 对象。这也应该解释为什么会发生这种在两个文本字段中显示P 的最后一个值的行为。

j 为1 时,textfield2.setText(tm.P[j+1]) 该字段的文本设置为最后一个元素"you"。现在在下一个循环中,当j 达到值2 时,第一个文本字段textfield2 被设置为最后一个元素"you"。但是在下一行中抛出了一个异常,所以该行没有被执行,所以textfield2 的文本仍然是you

最后,当j 为 3 时,第一行本身会引发异常,因此第一行之后的代码不会被执行,textfield1textfield2 都有文本值 "you" 存储在其中,这就是会显示并导致您突出显示的问题。

【讨论】:

    【解决方案2】:

    运行此代码时,您应该得到 ArrayIndexOutOfBoundsException 异常。您的代码将因异常而终止。

    根据您的示例,tm.P.length 为 3。

    当 j=2 时,

     textfield1= there
     textfield2= you
    

    当 j=3 时,

     textfield1= you
    

     textfield2.setText(tm.P[j+1]);
    

    正在获取异常(ArrayIndexOutOfBoundsException)并从 tm.P[4] 开始终止流程(数组中没有这样的位置)但 textfield2 先前的值是“你”

    所以你的最终结果是

     textfield1= you
     textfield2= you
    

    【讨论】:

      【解决方案3】:

      您可以执行附加检查 (If-Else)。 如果 textfield1 的文本等于数组 [1] 则 做交换。 如果它会在那里。它会交换它。 If not then that If check 将被忽略。

      到目前为止,这就是我理解您的问题的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        相关资源
        最近更新 更多