2009-05-12 7 views
1

J'essaie de maximiser JFrame à partir de JMenuBar, je ne peux pas passer une référence à l'image. Est-il possible d'obtenir une référence au cadre dans lequel il est utilisé?Contrôler JFrame à partir de JMenuBar

Je peux accéder au composant de niveau supérieur, mais il n'a aucun moyen de maximiser et de minimiser la trame.

public Container getApplicationFrame(ActionEvent event){ 
     JMenuItem menuItem = (JMenuItem) event.getSource(); 
     JPopupMenu popupMenu = (JPopupMenu) menuItem.getParent(); 
     Component invoker = popupMenu.getInvoker(); 
     JComponent invokerAsJComponent = (JComponent) invoker; 
     Container topLevel = invokerAsJComponent.getTopLevelAncestor(); 
     return topLevel; 
    } 

Répondre

5

Vous pouvez obtenir la fenêtre qui contient le JPanel via

Window window = SwingUtilities.getWindowAncestor(popupMenu); 

Vous pouvez alors maximiser l'utilisation window.setSize() - ou, puisque vous semblez savoir que c'est un JFrame, jeter à l'image et utiliser la setExtendedState méthode que Kevin mentionne. Example code de l'almanach de développeurs Java pour cela:

// This method minimizes a frame; the iconified bit is not affected 
public void maximize(Frame frame) { 
    int state = frame.getExtendedState(); 

    // Set the maximized bits 
    state |= Frame.MAXIMIZED_BOTH; 

    // Maximize the frame 
    frame.setExtendedState(state); 
} 
1

Vous pouvez sûrement stocker le cadre en question dans une variable locale quelque part? Comme pour réellement maximiser le cadre une fois que vous en avez obtenu, Frame.setExtendedState (MAXIMIZED_BOTH) est probablement ce que vous voulez. Javadoc

Bien que pas aussi élégant que pourrait être, voie rapide à la terre sur votre code existant:

public Frame getApplicationFrame(ActionEvent event){ 
     if(event.getSource() == null) return null; 

     Window topLevel = SwingUtilities.getWindowAncestor(event.getSource()); 

     if(!(topLevel instanceof Frame)) return null; 

     return (Frame)topLevel; 
} 

... 
//Somewhere in your code 
Frame appFrame = getApplicationFrame(myEvent); 
appFrame.setExtendedState(appFrame.getExtendedState() | Frame.MAXIMIZED_BOTH); 
... 

Version minimum Java 1.4.2. Soyez averti Je n'ai pas testé le code ci-dessus, mais vous devriez avoir l'idée.

0

La classe qui crée le cadre et la barre de menus peut également agir en tant que ActionListener pour l'élément de menu, car il a accès à la fois à l'image et à la barre de menus.

Questions connexes