Je ne sais pas pourquoi cela se produit, mais lorsque j'essaie de changer le titre sur mon JFrame, cela ne se met pas à jour. Le JFrame est statique, et je l'appelle en disant:

Assets.frame.setTitle("test");

J'ai un bloc de code dans lequel je passe le nom d'un fichier, et cela semble fonctionner, car lorsque j'imprime Assets.frame.getTitle(), il imprime ce que je veux que le titre soit. Mais sur le JFrame réel, cela ne change pas le titre. J'appelle également la méthode dans d'autres parties de mon programme, et elle semble y fonctionner. Y a-t-il un caractère spécial qui pourrait empêcher la méthode de mettre à jour l'image réelle que je ne connais pas?

Modifier:

Ce que j'essaye de faire (ouvrir un fichier)

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('.')));
    }
}

Et la méthode Main.setTitle () est:

public static void setTitle(String title) {
    Assets.frame.setTitle(title + " - " + "My Program");
}

La trame est définie et instanciée près de l'exécution du programme, et la méthode open est appelée lorsqu'un JButton est pressé. C'est le seul JFrame que j'ai dans le projet, et il est utilisé jusqu'à ce que le programme soit quitté.

Je ne sais pas à quel point il est reproductible, car cela fonctionne lorsque j'exécute une autre méthode similaire qui a également un appel à Main.setTitle (). C'est juste cette seule instance où cela ne fonctionne pas.

2
kneedhelp 4 janv. 2016 à 08:48

2 réponses

Meilleure réponse

Ce que j'essaye de faire (ouvrir un fichier)

Jetez alors un œil à la section du tutoriel Swing sur Comment utiliser le fichier Sélecteurs comme point de départ. Il vous montrera comment mieux structurer votre programme afin de ne pas avoir besoin de variables et de méthodes statiques partout. Vous pouvez télécharger le code de démonstration et jouer avec, puis le modifier selon vos besoins.

Ensuite, dans votre logique, si vous souhaitez mettre à jour le titre de votre cadre, vous pouvez utiliser la méthode SwingUtilities.windowForComponent(...) pour obtenir le cadre auquel vos composants sont ajoutés.

Le code que vous avez publié ne nous aide toujours pas à comprendre la conception de votre code ou le contexte dans lequel la méthode est invoquée, alors pourquoi ne pouvez-vous pas vous donner une réponse spécifique à votre problème. C'est pourquoi on vous a demandé de fournir un "exemple exécutable". Mais je vous suggère de restructurer votre programme en premier.

1
camickr 4 janv. 2016 à 06:24

Assurez-vous de mettre à jour l'interface utilisateur uniquement à partir du fil de discussion de répartition des événements . Voir SwingUtilities.invokeLater()

1
Core 4 janv. 2016 à 06:04