Frage

Ich versuche, JFrame innerhalb von JMenubar zu maximieren, ich kann keinen Verweis auf den Rahmen übergeben. Ist es möglich, einen Verweis auf den Rahmen zu erhalten, in dem er verwendet wird?

Ich kann zur obersten Komponente gelangen, aber es hat keine Möglichkeit, den Rahmen zu maximieren und zu minimieren.

    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;
    }
War es hilfreich?

Lösung

Sie können das Fenster erhalten, das das JPanel über über die Seite enthält

Window window = SwingUtilities.getWindowAncestor(popupMenu);

Sie können es dann entweder maximieren window.setSize() - oder, da Sie zu wissen scheinen, dass es ein JFrame ist, um es zu rahmen und die zu verwenden setExtendedState Methode, die Kevin erwähnt. Beispielcode Aus dem Almanach der Java -Entwickler dafür:

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

Andere Tipps

Sicherlich können Sie den fraglichen Rahmen irgendwo in einer lokalen Variablen verstauen?

Was die Maximierung des Rahmens tatsächlich maximiert hat, sobald Sie es haben, ist es wahrscheinlich das, was Sie wollen. Javadoc

Obwohl es nicht so elegant wie möglich ist, ist schneller Weg zu Ihrem vorhandenen Code:

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

Minimum Java Version 1.4.2. Seien Sie vor Gott, ich habe den obigen Code nicht getestet, aber Sie sollten die Idee bekommen.

Die Klasse, die den Rahmen und die Menüung erstellt, kann auch als ActionListener für den Menüelement fungieren, da er sowohl auf den Rahmen als auch auf die Menümen zugreifen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top