JFrame setTitle 不工作
JFrame setTitle not working
不确定为什么会发生这种情况,但是当我尝试更改 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() 时它起作用了。仅此一次无效。
确保您仅从事件调度线程更新UI。参见 SwingUtilities.invokeLater()
What I'm trying to do (open a file)
然后,也许可以看看 Swing 教程中关于 How to Use File Choosers 的部分作为起点。它将向您展示如何更好地构建您的程序,这样您就不需要到处都需要静态变量和方法。您可以下载演示代码并使用它,然后根据您的需要进行修改。
那么在你的逻辑中,如果你想更新框架的标题,那么你可以使用 SwingUtilities.windowForComponent(...)
方法来获取你的组件添加到的框架。
您发布的代码仍然无法帮助我们理解您的代码设计或调用方法的上下文,所以为什么不能针对您的问题给出具体的答案。这就是要求您提供 "runnable example" 的原因。但我建议你先重组你的程序。
不确定为什么会发生这种情况,但是当我尝试更改 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() 时它起作用了。仅此一次无效。
确保您仅从事件调度线程更新UI。参见 SwingUtilities.invokeLater()
What I'm trying to do (open a file)
然后,也许可以看看 Swing 教程中关于 How to Use File Choosers 的部分作为起点。它将向您展示如何更好地构建您的程序,这样您就不需要到处都需要静态变量和方法。您可以下载演示代码并使用它,然后根据您的需要进行修改。
那么在你的逻辑中,如果你想更新框架的标题,那么你可以使用 SwingUtilities.windowForComponent(...)
方法来获取你的组件添加到的框架。
您发布的代码仍然无法帮助我们理解您的代码设计或调用方法的上下文,所以为什么不能针对您的问题给出具体的答案。这就是要求您提供 "runnable example" 的原因。但我建议你先重组你的程序。