修改lblError时我正在使用set text。它正在我的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);
}
答案 0 :(得分:2)
然后要么1)从不调用else语句,要么2)你在与显示的对象不同的JLabel对象上调用方法。
要测试第一个,请执行:
else{
System.out.println("else block called");
lblError.setText(FLIGHT_NOT_READY);
}
要测试第二个,请检查以确保您没有创建包含JLabel的类的第二个实例。
否则,如果您仍然卡住,请考虑向我们提供更多信息和代码,因为我认为我们没有足够的信息能够完全放心地告诉您问题的原因是什么。
答案 1 :(得分:1)
您不一定只是在可见标签上调用setText()
并让它立即生效 - 尤其是如果您没有从事件处理程序中调用它。通常,如果更改显示在屏幕上的组件的外观,则必须在组件上调用validate()
以强制更新布局;在空标签获取新文本的情况下,这肯定是必需的。
编辑
@HovercraftFullOfEels对其他可能出错的事情也有一些很好的建议。