Domanda

sto cercando di massimizzare JFrame dall'interno JMenuBar, non posso passare un riferimento al telaio. E 'possibile ottenere un riferimento alla cornice che viene utilizzato in?

posso ottenere al componente di livello superiore ma non avere un modo per massimizzare e minimizzare telaio.

    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;
    }
È stato utile?

Soluzione

È possibile ottenere la finestra che contiene il JPanel tramite

Window window = SwingUtilities.getWindowAncestor(popupMenu);

È quindi possibile massimizzare usando window.setSize() - o, dal momento che ti sembra di sapere che si tratta di un JFrame, cast a cornice e utilizzare il metodo setExtendedState che Kevin cita. codice di esempio dal Java Developers' Almanacco per questo:

// 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);
}

Altri suggerimenti

Sicuramente si può riporre il telaio in questione in una variabile locale da qualche parte?

Per quanto riguarda in realtà massimizzare il telaio una volta che hai ahold di esso, Frame.setExtendedState (MAXIMIZED_BOTH) è probabilmente quello che volete.

Anche se non è elegante come potrebbe essere, percorso veloce per terra sul vostro codice esistente:

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);
...

Java minimo la versione 1.4.2. Essere infastidire Non ho ancora testato il codice di cui sopra, ma si dovrebbe ottenere l'idea.

La classe che crea la cornice e la barra dei menu può anche agire come l'ActionListener per la voce di menu, dal momento che ha accesso sia il telaio e la barra dei menu.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top