El control de JFrame de JMenuBar
Pregunta
Estoy tratando de maximizar el JFrame desde dentro JMenuBar, no puedo dejar pasar una referencia al marco. ¿Es posible obtener una referencia a la trama que se utiliza en?
i puede llegar al componente de nivel superior pero no tiene una forma de maximizar y minimizar marco.
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;
}
Solución
Puede obtener la ventana que contiene los JPanel a través de
Window window = SwingUtilities.getWindowAncestor(popupMenu);
A continuación, puede maximizar el uso que window.setSize()
- o, ya que parece que saber que es un JFrame, echarlo al fotograma y utilizar el método setExtendedState
que Kevin menciona. Ejemplo código de la Java desarrolladores Almanaque para que:
// 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);
}
Otros consejos
Sin duda, se puede esconder el marco en cuestión en una variable local en alguna parte?
En cuanto a la maximización de la realidad del marco una vez que tienes el ahold de ella, Frame.setExtendedState (MAXIMIZED_BOTH) es probablemente lo que quiere.
Aunque no es tan elegante como podría ser, camino rápido a tierra en su código existente:
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 mínimo la versión 1.4.2. Avisado que no he probado el código anterior, pero que debería hacerse una idea.
La clase que crea el marco y la barra de menú también puede actuar como el ActionListener para el elemento de menú, ya que tiene acceso tanto el marco como la barra de menú.