Управление JFrame из JMenuBar - PullRequest
1 голос
/ 12 мая 2009

Я пытаюсь максимизировать JFrame из JMenuBar, не могу передать ссылку на фрейм. Можно ли получить ссылку на фрейм, в котором он используется?

Я могу добраться до компонента верхнего уровня, но у него нет способа максимизировать и минимизировать фрейм.

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

Ответы [ 3 ]

5 голосов
/ 12 мая 2009

Окно, содержащее JPanel, можно получить через

Window window = SwingUtilities.getWindowAncestor(popupMenu);

Затем вы можете либо максимизировать его, используя window.setSize() - или, поскольку вы, кажется, знаете, что это JFrame, приведите его к кадру и используйте метод setExtendedState, который упоминает Кевин. Пример кода из Альманаха разработчиков Java для этого:

// 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 голос
/ 12 мая 2009

Конечно, вы можете спрятать данный кадр в локальной переменной где-нибудь?

Что касается фактического максимизации фрейма, как только вы его овладели, Frame.setExtendedState (MAXIMIZED_BOTH), вероятно, то, что вам нужно. Javadoc

Хотя это не так элегантно, как могло бы быть, быстрый путь к существующему коду:

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 1.4.2. Будьте предупреждены. Я не проверял приведенный выше код, но вы должны понять.

0 голосов
/ 12 мая 2009

Класс, который создает фрейм и строку меню, также может выступать в качестве ActionListener для элемента меню, поскольку он имеет доступ как к фрейму, так и к строке меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...