不确定为什么会这样,但是当我尝试更改JFrame上的标题时,它没有更新。 JFrame是静态的,我称之为:
Assets.frame.setTitle("test");
我有一个代码块,我在其中传入一个文件的名称,它似乎有效,因为当我打印出Assets.frame.getTitle()
时,它打印出我想要的标题。但在实际的JFrame上,它并没有改变标题。我也在我的程序的其他部分调用该方法,它似乎在那里工作。是否有一些特殊字符可能导致该方法无法更新我不了解的实际帧?
修改
我尝试做什么(打开文件)
public static void open() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int result = chooser.showOpenDialog(Assets.frame);
if (result == JFileChooser.APPROVE_OPTION) {
MyFile myFile = new MyFile(chooser.getSelectedFile().getPath());
Main.setTitle(Constants.current_file.getName().substring(0, mapFile.getName().indexOf('.')));
}
}
和Main.setTitle()方法是:
public static void setTitle(String title) {
Assets.frame.setTitle(title + " - " + "My Program");
}
在程序执行附近定义和实例化框架,并在按下JButton时调用open方法。这是我在项目中唯一的JFrame,它在程序退出之前一直在使用。
我不知道它是多么可重复,因为当我运行另一个调用Main.setTitle()的类似方法时它也能正常工作。它只是这一个不起作用的例子。
答案 0 :(得分:1)
确保仅从事件派发线程更新UI。见SwingUtilities.invokeLater()
答案 1 :(得分:1)
我尝试做什么(打开文件)
然后可以看一下How to Use File Choosers上Swing教程中的部分作为起点。它将向您展示如何更好地构建您的程序,这样您就不需要在任何地方使用静态变量和方法。您可以下载演示代码并使用它,然后根据您的需要进行修改。
然后在您的逻辑中,如果您想要更新框架的标题,那么您可以使用SwingUtilities.windowForComponent(...)
方法来获取组件添加到的框架。
您发布的代码仍然无法帮助我们了解代码的设计或方法调用的背景,因此为什么无法为您提供问题的具体答案。这就是为什么要求你提供一个"可运行的例子"。但我建议你先重组你的程序。