Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

LookAndFeel et JOptionPane

8 réponses
Avatar
yvon.thoravalNO-SPAM
j'ai une JFrame où j'ai choisi :
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());

MAIS, mon "JOptionPane" lui a le LookAndFeel MacOS X, comment faire en
sorte que toutes les fenêtre aient le même L & F ?

--
yt

8 réponses

Avatar
Thibaut Desmarest
Yvon Thoraval wrote:
j'ai une JFrame où j'ai choisi :
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());

MAIS, mon "JOptionPane" lui a le LookAndFeel MacOS X, comment faire en
sorte que toutes les fenêtre aient le même L & F ?



Est ce que ton JOptionPane a bien ta JFrame pour parent ?

As tu bien fait ton
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
en premier ?

Avatar
yvon.thoravalNO-SPAM
Thibaut Desmarest wrote:

Est ce que ton JOptionPane a bien ta JFrame pour parent ?

As tu bien fait ton
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
en premier ?


Ben, oui, enfin, voila comment c'est orchestré :

public class DBManagerAdmin {
[...]
public DBManagerAdmin() {

createConnectionDialog();

infoButton = new JButton("Config");
infoButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
activateConnectionDialog();
}
}
);
[...]
}
[...]

void activateConnectionDialog()
{
if(JOptionPane.showOptionDialog(tableScrollPane,
connectionPanel, ConnectTitle,
JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, ConnectOptionNames, ConnectOptionNames[0]) == 0)
{
connect();
frame.setVisible(true);
}
else if(!frame.isVisible()) System.exit(0);
}

public void createConnectionDialog() {
crée le JPanel (interne à JOptionPane)
[...]
}
[...]
private static void createAndShowGUI() {

//Use the Java look and feel.
try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) { }

[...]

//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);

//Create and set up the window.
frame = new JFrame("DBManagerAdmin");
[...]

//Create and set up the content pane.
DBManagerAdmin dbManagerAdmin = new DBManagerAdmin();
[...]
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}


d'après moi, je me trompe sans doute, on a :

main -> createAndShowGUI ->
UIManager.getCrossPlatformLookAndFeelClassName -> JFrame ->
DBManagerAdmin -> createConnectionDialog (JPanel only) ->
activateConnectionDialog (si click sur le button "Config")


MAIS, bon "je crois comprendre", j'ai placé ce dialog où ça m'arrange
(ici où dessus d'une JTable) est-ce à cause de cela que je perd le Look
& Feel ? J'aurais du placer mon dialog au dessus de la JFrame (parent)
???

j'essaie pour voir...
--
yt

Avatar
Black Myst
Yvon Thoraval wrote:
Thibaut Desmarest wrote:
-------8<-----------------8<------------------8<-------------
[...]
private static void createAndShowGUI() {

//Use the Java look and feel.
try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) { }

[...]

//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);

//Create and set up the window.
frame = new JFrame("DBManagerAdmin");
[...]

//Create and set up the content pane.
DBManagerAdmin dbManagerAdmin = new DBManagerAdmin();
[...]
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}


d'après moi, je me trompe sans doute, on a :

main -> createAndShowGUI ->
UIManager.getCrossPlatformLookAndFeelClassName -> JFrame ->
DBManagerAdmin -> createConnectionDialog (JPanel only) ->
activateConnectionDialog (si click sur le button "Config")


MAIS, bon "je crois comprendre", j'ai placé ce dialog où ça m'arrange
(ici où dessus d'une JTable) est-ce à cause de cela que je perd le Look
& Feel ? J'aurais du placer mon dialog au dessus de la JFrame (parent)
???

j'essaie pour voir...


J'ai deja fait joujou avec les themes, c'est assez capricieux, surtout
si tu veux changer le look&feel à chaud... mais tout est possible.

1. Tu veux changer le look au démmarage, fait le AVANT quoi que soit
d'autre en relation plus ou moins direct avec Swing (Donc en première
instruction de ton main)
apres la ligne javax.swing.SwingUtilities.invokeLater(...) c'est déjà
probablement trop tard.

2. Tu veux changer le look à chaud, il y a une methode à invoquer pour
chaque JFrame principal(sans parent) pour appliquer la modif (qui se
répercute alors sur toutes les Jframe et JDialog fille)
(je l'ai fait pour le boullo... mais j'y suis pas :-/)

Peut-etre aussi que j'ai faux, car j'ai rien vérifié :-/

Avatar
yvon.thoravalNO-SPAM
Black Myst <Black_point_Myst_chez_free_point_fr> wrote:

1. Tu veux changer le look au démmarage, fait le AVANT quoi que soit
d'autre en relation plus ou moins direct avec Swing (Donc en première
instruction de ton main)
apres la ligne javax.swing.SwingUtilities.invokeLater(...) c'est déjà
probablement trop tard.



dans le main, ça ne change rien...
bizarre...
2. Tu veux changer le look à chaud, il y a une methode à invoquer pour
chaque JFrame principal(sans parent) pour appliquer la modif (qui se
répercute alors sur toutes les Jframe et JDialog fille)
(je l'ai fait pour le boullo... mais j'y suis pas :-/)
oui, ça c'est pour plus tard, permettre à l'utilisateur de changer le

look.

Bon, concernant "l'endroit" où il faut mettre :

try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) { }


j'ai fait un AUTRE essai avec l'exemple sun
(<http://java.sun.com/docs/books/tutorial/uiswing/components/internalfra
me.html>) sur JInternalFrame, là ça marche impec, il suffit de mettre
cela dans createAndShowGUI() (pas besoin d'être dans le main()) !!!

conclusion, au lieu d'un JDialog je vais utiliser une JInternalFrame ???


--
yt

Avatar
Thibaut Desmarest
Yvon Thoraval wrote:
Black Myst <Black_point_Myst_chez_free_point_fr> wrote:


1. Tu veux changer le look au démmarage, fait le AVANT quoi que soit
d'autre en relation plus ou moins direct avec Swing (Donc en première
instruction de ton main)
apres la ligne javax.swing.SwingUtilities.invokeLater(...) c'est déjà
probablement trop tard.




dans le main, ça ne change rien...
bizarre...

2. Tu veux changer le look à chaud, il y a une methode à invoquer pour
chaque JFrame principal(sans parent) pour appliquer la modif (qui se
répercute alors sur toutes les Jframe et JDialog fille)
(je l'ai fait pour le boullo... mais j'y suis pas :-/)


oui, ça c'est pour plus tard, permettre à l'utilisateur de changer le
look.

Bon, concernant "l'endroit" où il faut mettre :

try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) { }


j'ai fait un AUTRE essai avec l'exemple sun
(<http://java.sun.com/docs/books/tutorial/uiswing/components/internalfra
me.html>) sur JInternalFrame, là ça marche impec, il suffit de mettre
cela dans createAndShowGUI() (pas besoin d'être dans le main()) !!!

conclusion, au lieu d'un JDialog je vais utiliser une JInternalFrame ???




Ton problème est assez bizarre en effet, parceque moi dans le programme
que je code actuellement j'ai mis le UIManager.setLookAndFeel(... au
tout début du lancement de l'application (première ligne de code du
premier constructeur), et ça marche très bien ! Et même si mon interface
graphique n'est pas encore chargée, je peux balancer des JOptionPane
même avec un parent "null" et j'ai bien mon lookAndFeel comme prévu...


Avatar
yvon.thoravalNO-SPAM
Thibaut Desmarest wrote:


Ton problème est assez bizarre en effet, parceque moi dans le programme
que je code actuellement j'ai mis le UIManager.setLookAndFeel(... au
tout début du lancement de l'application (première ligne de code du
premier constructeur), et ça marche très bien ! Et même si mon interface
graphique n'est pas encore chargée, je peux balancer des JOptionPane
même avec un parent "null" et j'ai bien mon lookAndFeel comme prévu...


Ah M@*DE !!! Un pb spécifique à MacOS X.3.5 ???
Tu utilises quel OS ?

En tout cas, avec des JInternalFrame ça marche impec, mais bon, la
logique entre fenêtres n'est pas la même...
--
yt

Avatar
Thibaut Desmarest
Yvon Thoraval wrote:

Thibaut Desmarest wrote:


Ton problème est assez bizarre en effet, parceque moi dans le programme
que je code actuellement j'ai mis le UIManager.setLookAndFeel(... au
tout début du lancement de l'application (première ligne de code du
premier constructeur), et ça marche très bien ! Et même si mon interface
graphique n'est pas encore chargée, je peux balancer des JOptionPane
même avec un parent "null" et j'ai bien mon lookAndFeel comme prévu...



Ah M@*DE !!! Un pb spécifique à MacOS X.3.5 ???
Tu utilises quel OS ?

En tout cas, avec des JInternalFrame ça marche impec, mais bon, la
logique entre fenêtres n'est pas la même...


Pour savoir il faudrait que tu essayes d'executer ton programme sur une
autre machine...

Moi je suis sous Windoze...


Avatar
yvon.thoravalNO-SPAM
Thibaut Desmarest wrote:

Pour savoir il faudrait que tu essayes d'executer ton programme sur une
autre machine...


OK, j'ai qq'1 qui m'essayer ça...
--
yt