-1

修改 lblError 时,我使用的是设置文本。它在我的 try catch 语句中工作得很好。但是当我运行 else 语句并进入 else 语句时...(我已经检查过)setText 不会使标签显示我想要的文本

它有效,此代码已实现:

try {
    Schedule newSched = ScheduleReader.read(text);
    for (int i = 0; i <= newSched.getLastFlightTime(); i++) {
        ArrayList<Flight> flightsAtTime = newSched.getFlights(i);

    for (Flight f : flightsAtTime) {
         s.add(f);
        }
    }
    flights= getArrayList(s);
    displaySchedule();
    lblError.setText("");

   } catch (IOException e1) {
    lblError.setText(IO_MESSAGE);
   } catch (FormatException e1) {
    lblError.setText(FORMAT_MESSAGE);
   } catch (DuplicateFlightException e1) {
    lblError.setText(DUPLICATE_FLIGHT_MESSAGE);
   }
}

但是当我这样做时它不起作用:

 else{
        lblError.setText(FLIGHT_NOT_READY);
    }
4

2 回答 2

2

然后要么 1)永远不会调用 else 语句,要么 2)您在与显示的 JLabel 对象不同的 JLabel 对象上调用该方法。

要测试第一个,请执行以下操作:

else{
   System.out.println("else block called");
   lblError.setText(FLIGHT_NOT_READY);
}

要测试第二个,请检查以确保您没有创建包含 JLabel 的类的第二个实例。

否则,如果您仍然卡住,请考虑向我们提供更多信息和代码,因为我认为我们没有足够的能力完全自信地告诉您问题的原因是什么。

于 2012-05-25T00:36:03.097 回答
1

您不一定只调用setText()可见标签并使其立即生效 -特别是如果您不是从事件处理程序调用它。通常,如果您更改屏幕上显示的组件的外观,则必须调用validate()该组件以强制更新布局;在空标签获取新文本的情况下,这肯定是必需的。

编辑

@HovercraftFullOfEels 也对其他可能出错的事情提出了一些很好的建议。

于 2012-05-25T00:37:32.263 回答