GlassPane - an Menupunkte herankommen

Status
Nicht offen für weitere Antworten.

Jewe

Mitglied
Hallo Leute!
Ich stehe seit einiger Zeit vor einem mehr oder minder großen Problem:

Ich habe mir ein kleines Fenster aufgebaut, das ein Menu mit zwei Unterpunkten enthält, eine Checkbox, zwei normale Buttons und ein Label.

Wenn ich die checkBox aktiviere, legt sich ein GlassPane auf mein Frame. So habe ich eine HilfeEinblendung im Stile von Word realisiert (auf Click). Nur leider weiß ich nicht, warum das bei den MenuItems nicht funktioniert!
Vielleicht kann mir ja Jemand bei diesem Problem helfen!?!

Hier ein bisschen Code zur Verdeutlichung:

Code:
Point glassPanePoint = e.getPoint();
        Container container = contentPane;
        Point containerPoint = SwingUtilities.convertPoint(
                                        glassPane,
                                        glassPanePoint,
                                        contentPane);
                                        
        Container menuBarContainer = menuBar;
        Point barContainerPoint = SwingUtilities.convertPoint(
                                        glassPane,
                                        glassPanePoint,
                                        menuBar);
                                        
        Container menuContainer = menu;
        Point menuContainerPoint = SwingUtilities.convertPoint(
                                        glassPane,
                                        glassPanePoint,
                                        menu);

        if (containerPoint.y < 0) 
        {  	// we're not in the content pane
            
        	if (containerPoint.y + menuBar.getHeight() >= 0) 
            {  //The mouse event is over the menu bar.
             	 
             	 //Make it possible to open the Menus to select menuItems      
                   Component component = 
                      SwingUtilities.getDeepestComponentAt(
                                      menuBar,
                                      barContainerPoint.x,
                                      barContainerPoint.y);
                                    
            	 if((component!=null)&&(component.equals(menu)))
            	 {
            	             Point componentPoint = SwingUtilities.convertPoint(
                                                 glassPane,
                                                 glassPanePoint,
                                                 component);
                             
            		 component.dispatchEvent(new MouseEvent(component,
                                              	e.getID(),
	                                e.getWhen(),
	                                e.getModifiers(),
	                                componentPoint.x,
	                                componentPoint.y,
	                                e.getClickCount(),
	                                e.isPopupTrigger()));

Bis hierhin funktioniert die Sache. Ich kann das Menu öffnen, obwohl ich das GlassPane aktiviert habe. Aber das hier geht irgendwie nicht mehr:

Code:
//Second Time to differ the several menuItems   
                          Component component2 =
                                SwingUtilities.getDeepestComponentAt(
                                          menu,
                                          menuContainerPoint.x,
                                          menuContainerPoint.y);
                                          
                          Point componentPoint2 = SwingUtilities.convertPoint(
                             glassPane,
                             glassPanePoint,
                             component2);
                             
                           component2.dispatchEvent(new MouseEvent(component,
                                              	e.getID(),
	                                e.getWhen(),
	                                e.getModifiers(),
	                                componentPoint2.x,
	                                componentPoint2.y,
	                                e.getClickCount(),
	                                e.isPopupTrigger()));       
                if((component2!=null)&&(component2.equals(menuItem1)))
                {
                 makeHelp("erstes MenuItem","Hier würde jetzt eine nähere Erläuterung zu diesem Punkt kommen", true);
                 }
 

Mag1c

Top Contributor
Hi,

wie gehören denn die beiden Code-Schnippsel zusammen ? Und warum machst du die Rechnerei mit dem glassPanePoint ? Bekommt man nicht mit getDeepestComponentAt(frame, ...) automatisch die richtige Komponente ?
also in etwa:
Code:
Component comp = getDeepestComponentAt(frame, ...);
if ( comp == menu ) {
    ...
}
else if ( comp == menuitem ) {
    ...
}
Gruß
Mag1c
 

Jewe

Mitglied
Die Schnipsel gehören direkt untereinander. Ich öffne also das menü und will dann gleich wieder rein schauen, ob ein weiteres Event eines meiner Menüpunkte trifft.
Das mit der Rumrechnerei... weiß au ned. Wenns kürzer geht, okay. Vielleicht später, aber es läuft ja auch so :D

Aber n anderes Problem beschäftigt mich auch noch: Hab gerade gemerkt, dass ich, wenn ich das Menü aufmache auch automatisch mein GlassPane kille. Etwas ungünstig...

EDIT: Ich hab das Problemmittlerweile selbst hinbekommen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
D GlassPane für JPanel AWT, Swing, JavaFX & SWT 2
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
A Swing GlassPane Cursor wird bei fremder Komponente nicht angezeigt AWT, Swing, JavaFX & SWT 3
B GlassPane setVisible(true) funktioniert nicht AWT, Swing, JavaFX & SWT 2
M JComboBox auf GlassPane-Panel AWT, Swing, JavaFX & SWT 2
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
F GlassPane deaktiviert MouseKlicks nicht AWT, Swing, JavaFX & SWT 6
hdi Swing GUI Sperren mit GlassPane AWT, Swing, JavaFX & SWT 7
K Alle Events abfangen mit GlassPane AWT, Swing, JavaFX & SWT 7
G Probleme mit Glasspane AWT, Swing, JavaFX & SWT 4
J Glasspane Demo von Sun hat Probleme - wie fix ich die? AWT, Swing, JavaFX & SWT 10
A GlassPane wird zu spät angezeigt AWT, Swing, JavaFX & SWT 2
G JDialog hinter Glasspane von JFrame. Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid GlassPane AWT, Swing, JavaFX & SWT 5
m@nu Animation in GlassPane: Performanceeinbruch JFrame maximiert AWT, Swing, JavaFX & SWT 17
C Frage zur GlassPane AWT, Swing, JavaFX & SWT 33
G Probleme mit GlassPane AWT, Swing, JavaFX & SWT 3
L GlassPane ein und abschalten AWT, Swing, JavaFX & SWT 3
M Problem mit GlassPane AWT, Swing, JavaFX & SWT 4
I GlassPane AWT, Swing, JavaFX & SWT 8
M Glasspane und dispatchen von Events AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben