JFrame setTitle不起作用

时间:2016-01-04 05:48:34

标签: java swing jframe jfilechooser titlebar

不确定为什么会这样,但是当我尝试更改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()的类似方法时它也能正常工作。它只是这一个不起作用的例子。

2 个答案:

答案 0 :(得分:1)

确保仅从事件派发线程更新UI。见SwingUtilities.invokeLater()

答案 1 :(得分:1)

  

我尝试做什么(打开文件)

然后可以看一下How to Use File Choosers上Swing教程中的部分作为起点。它将向您展示如何更好地构建您的程序,这样您就不需要在任何地方使用静态变量和方法。您可以下载演示代码并使用它,然后根据您的需要进行修改。

然后在您的逻辑中,如果您想要更新框架的标题,那么您可以使用SwingUtilities.windowForComponent(...)方法来获取组件添加到的框架。

您发布的代码仍然无法帮助我们了解代码的设计或方法调用的背景,因此为什么无法为您提供问题的具体答案。这就是为什么要求你提供一个"可运行的例子"。但我建议你先重组你的程序。