Свернуть/развернуть родительский JFrame

Я делаю приложение викторины. И когда команда нажимает свою кнопку, им по-прежнему не разрешается видеть вопрос или видео/аудио. Такая информация отображается в окне опроса (это jpanel), добавленном к родительскому JFrame. То, что я пытаюсь сделать, это минимизировать JFrame, когда команда нажимает кнопку. Это работает отлично. Если кнопка нажата, администратор получает всплывающее окно в своем представлении. Если ответ неверный, JFrame следует снова максимизировать. Поэтому, когда он нажимает кнопку, если ответ неверен, логическое значение в модели викторины ($maximize) устанавливается равным true. Затем мы обновляем представления. В обновлении представления я проверяю, установлено ли логическое значение true. Если это правда, я вызываю метод максимизации. И максимизируйте его снова, когда ответ неверен. Минимизация работает отлично, максимизация — нет.

Кто-нибудь знает, что случилось?

Это мой код в представлении, это представление представляет собой JPanel в большем JFrame, где происходит максимизация:

public void update(Observable arg0, Object arg1) {
    $question = (Question) arg1;

    if(((QuizModel) getModel()).getMaximize()) /* Only maximize the JFrame when needed */
        maximizeFrame(); /* Maximize the frame first */     



    repaint();
}


/**
 * Maximize the parent JFrame so the teams can see the question
 */
protected void maximizeFrame() {
    System.out.println("MAXIMIZE");
    JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this);
    topFrame.setState(JFrame.MAXIMIZED_BOTH);

}

Минимизация происходит, когда команда нажимает свою кнопку, вот код:

/**
 * If a button gets pressed we call this function
 * @param team the team that pressed their button
 */
protected void buttonPressed(int team) {
    /* Check if a button is pressed */
    if(((QuizModel) getModel()).getTeamPressed() > 0)
        $isPressed = true;
    else
        $isPressed = false;

    /* If there hasn't been pressed yet and the question is not null */
    if(!$isPressed && $question != null){
        minimizeFrame(); /* Minimize the frame */

        /* If this question has a media path we need to pause the audio/video, we also check if the user has installed vlcplayer and selected the right path */
        if($question.getMediaPath() != null && QuizSoftwareModel.$vlcPath != null)
            ((QuizController)getController()).pause(); /* Pause the video */

        /* Give a pop up message to the admin that a team has pushed their button */
        ((QuizController)getController()).showScoreView(team);
    }

}

/**
 * Minimize the parent JFrame so the teams can't see the question anymore 
 */
protected void minimizeFrame() {
    JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this);
    topFrame.setState(JFrame.ICONIFIED);

}

[EDIT] Уменьшен код.

Спасибо!


person user3485470    schedule 21.05.2014    source источник
comment
Это помогает? stackoverflow.com/questions/5258207 /   -  person Tim B    schedule 21.05.2014
comment
пожалуйста, сейчас не время публиковать SSCCE/MCVE   -  person mKorbel    schedule 21.05.2014
comment
Это не PHP, не используйте $ в именах переменных.   -  person user1803551    schedule 21.05.2014
comment
@TimB Нет, уже пробовал, все равно не работает.   -  person user3485470    schedule 21.05.2014
comment
@user1803551 user1803551 В школе нам сказали сделать это для объектно-ориентированного Java, я знаю, что это не рекомендуется в документации по Java, но все же им нужно оценить этот код, так что пока я слушаю их.   -  person user3485470    schedule 21.05.2014
comment
Опубликуйте MCVE с акцентом на минимальный. вам не нужно 4 класса, чтобы продемонстрировать задачу минимизации-максимума.   -  person user1803551    schedule 21.05.2014
comment
Нам в школе говорили, что делать это для объектно-ориентированного Java это предложение не имеет смысла. Java является объектно-ориентированным, и использование $ в основном используется в PHP и не имеет ничего общего с объектно-ориентированными языками. Удалите его для лучшей читаемости кода.   -  person user1803551    schedule 21.05.2014
comment
(1) Если вы прочитаете javadoc для setState, вы увидите, что там написано Sets the state of this frame (obsolete), вместо этого используйте setExtendedState. (2) Получите состояние кадра с помощью getExtendedState вместо сохранения переменной, которая проверяет состояние.   -  person user1803551    schedule 21.05.2014
comment
Действия по отладке: (1) Вызывается ли maximizeFrame, когда нужно, вы видите сообщение печати? Если да, (2) допустить, чтобы переменная topFrame содержала правильный фрейм? Если да, (3) говорит ли getExtendedState, что кадр еще не максимизирован? Если да, (4) максимизирует ли setExtendedState кадр? Если нет, (5) напишите 5-строчную программу, которая использует тот же вызов функции в свернутом кадре, и посмотрите, работает ли она. Если да (а так и будет, если вы все сделаете правильно), (6) найдите отличия.   -  person user1803551    schedule 21.05.2014
comment
@user1803551 user1803551 Я решил проблему, теперь везде использую ExtendedState. я также использовал topFrame.MAXIMIZED_BOTH вместо JFrame.MAXIMIZED_BOTH, не знаю, было ли это полезно. Как я могу поместить JFrame сверху, когда я максимизирую, чтобы он отображался перед всем? Это не всегда должно быть сверху, сразу после максимизации я хочу, чтобы это было.   -  person user3485470    schedule 21.05.2014
comment
Посмотрите, что может сделать чтение javadoc? Использование JFrame.MAXIMIZED_BOTH имеет тот же эффект, что и topFrame.MAXIMIZED_BOTH, но статический доступ к нему правильный. Чтобы вывести рамку на передний план, используйте toFront или requestFocusInWindow.   -  person user1803551    schedule 21.05.2014
comment
Вы можете ответить на свой вопрос вместо того, чтобы менять заголовок.   -  person trashgod    schedule 21.05.2014


Ответы (1)


Решение использует topFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); вместо setState. Setstate только устанавливает состояние текущего кадра, потому что мне нужен родительский кадр, который мне нужен для использования setExtendedState.

Также пропущены некоторые логические значения для максимизации/минимизации при необходимости.

person user3485470    schedule 22.05.2014