bonsoir,
Je cherche a afficher un menu que j'ai créé moi même à l'aide du PopUpFactory. je n'est pas de problème pour faire ce que je veux, à savoir l'utilisation des classes Popup et PopupFactory avec transparence.
Le problème est que le remplacement du popUpFactory par un nouveau que je crée moi même, ben tout modifie le PopupFactory du SDK java. c'est à dire que tous les menus popup de mon appli Bug, même les composants de base de java comme JComboBox(impossible de sélectionner un autre Item que celui sélectionné par défaut).
Voici le code des deux classes du popup:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 import com.sun.awt.AWTUtilities; import java.awt.BorderLayout; import java.awt.Component; import javax.swing.JToolTip; import javax.swing.JWindow; import javax.swing.Popup; class TranslucentPopup extends Popup { private final JWindow popupWindow; public TranslucentPopup(Component owner, Component contents, int x, int y) { // create a new heavyweight window this.popupWindow = new JWindow(); // mark the popup with partial opacity AWTUtilities.setWindowOpacity(popupWindow, (contents instanceof JToolTip) ? 0.0f : 1.0f); // determine the popup location popupWindow.setLocation(x, y); // add the contents to the popup popupWindow.getContentPane().add(contents, BorderLayout.CENTER); contents.invalidate(); } @Override public void show() { this.popupWindow.setVisible(true); this.popupWindow.pack(); // mark the window as non-opaque, so that the // shadow border pixels take on the per-pixel // translucency AWTUtilities.setWindowOpaque(this.popupWindow, false); } @Override public void hide() { this.popupWindow.setVisible(false); this.popupWindow.removeAll(); this.popupWindow.dispose(); } }Dans le constructeur de mon composant du menu, j'ai fait ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 import java.awt.Component; import javax.swing.Popup; import javax.swing.PopupFactory; public class TranslucentPopupFactory extends PopupFactory { @Override public Popup getPopup(Component owner, Component contents, int x, int y) throws IllegalArgumentException { return new TranslucentPopup(owner, contents, x, y); } }
Ensuite pour afficher mon Popup j'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PopupFactory.setSharedInstance(new TranslucentPopupFactory());
et pour le cacher:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 newPopup = PopupFactory.getSharedInstance().getPopup(this.getRootPane(), this, this.getX(), this.getY()); newPopup.show();
Mon menu fonctionne parfaitement avec ce que j'ai montré là dessus..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 newPopup.hide();
Si vous avais une explication, merci d'avance![]()
Partager