Вопрос

Я пытаюсь максимизировать 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;
    }
Это было полезно?

Решение

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

Window window = SwingUtilities.getWindowAncestor(popupMenu);

Затем вы можете либо максимизировать его, используя window.setSize() -- или, поскольку вы, кажется, знаете, что это JFrame, приведите его к Frame и используйте 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);
}

Другие советы

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

Что касается фактического максимизации кадра, как только вы им овладеете, Frame.setExtendedState(MAXIMIZED_BOT), вероятно, это то, что вы хотите. 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.Я не тестировал приведенный выше код, но вы должны уловить идею.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top