【问题标题】:Calling an arrayList from another class which is private从另一个私有类调用 arrayList
【发布时间】:2016-05-08 14:14:37
【问题描述】:

我正在尝试在 gui 中显示一个数组列表。但是我遇到了一些麻烦。我需要检查我的游戏是否合法,如果不合法,它会调用显示数组列表的 getProblems。我尝试直接在 GUI 类中调用 getProblems,但它会将数组显示为空。 (因为它不检查它是否合法)。我还尝试调用 isLegal 然后调用 getProblems,但您不能在 JOptionPane 中执行此操作。关于如何称呼它的任何提示?

GetProblems 类

 protected List < String > getProblems() {
     return displayOutput;
 }

IsLegal 类

public boolean isLegal() {
  boolean legality;

  if (checkRowConstraints().isEmpty()) {
    legality = true;

  } else {
    getProblems();
    legality = false;

  }
  return legalCheck;
}

图形界面:

 public void actionPerformed(ActionEvent e) {
     if (!(puzzle.isLegal())) {
       JOptionPane.showMessageDialog(FutoshikiFrame.this,
         puzzle.getProblems(),
         "You made a mistake!",
         JOptionPane.INFORMATION_MESSAGE);

这是 GUI 结果的实际显示与我试图获得的结果之间的差异。

发现更多问题: 我需要返回数组列表然后清空它。固定

【问题讨论】:

  • 我很惊讶甚至编译,因为当您在 getProblems() 中将返回类型指定为 List&lt;String&gt; 时,您正试图返回 String
  • @TEK 调整后,当我将代码粘贴到 stackoverflow 中时,我忘记删除第一行(正在格式化数组,因此它只打印方括号内的字符,例如:“Hi”而不是“[嗨]”)

标签: java swing arraylist actionevent


【解决方案1】:

目前,当您在JOptionPane 中调用puzzle.getProblems() 时,会隐式调用ListtoString() 方法。因此,与其获取您想要的List 的内容,不如获取toString() 给您的任何内容。

除非您先对其进行迭代,否则您不会获得 List 的内容。

你可以试试这样的。 (注意,这是未经测试的代码。用于演示目的。)

String formattedString = "";
//let's iterate over our List and build a formatted string for output
for(String element : puzzle.getProblems())
{
    formattedString += element;
}

然后就可以输出这个格式化的String

 public void actionPerformed(ActionEvent e) {
     if (!(puzzle.isLegal())) {
       JOptionPane.showMessageDialog(FutoshikiFrame.this,
         formattedString,
         "You made a mistake!",
         JOptionPane.INFORMATION_MESSAGE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2013-09-06
    • 2015-02-07
    • 1970-01-01
    • 2011-08-12
    相关资源
    最近更新 更多