Я делаю приложение викторины. И когда команда нажимает свою кнопку, им по-прежнему не разрешается видеть вопрос или видео/аудио. Такая информация отображается в окне опроса (это 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 user1803551   schedule 21.05.2014$
в основном используется в PHP и не имеет ничего общего с объектно-ориентированными языками. Удалите его для лучшей читаемости кода. - person user1803551   schedule 21.05.2014setState
, вы увидите, что там написаноSets the state of this frame (obsolete)
, вместо этого используйтеsetExtendedState
. (2) Получите состояние кадра с помощьюgetExtendedState
вместо сохранения переменной, которая проверяет состояние. - person user1803551   schedule 21.05.2014maximizeFrame
, когда нужно, вы видите сообщение печати? Если да, (2) допустить, чтобы переменнаяtopFrame
содержала правильный фрейм? Если да, (3) говорит лиgetExtendedState
, что кадр еще не максимизирован? Если да, (4) максимизирует лиsetExtendedState
кадр? Если нет, (5) напишите 5-строчную программу, которая использует тот же вызов функции в свернутом кадре, и посмотрите, работает ли она. Если да (а так и будет, если вы все сделаете правильно), (6) найдите отличия. - person user1803551   schedule 21.05.2014JFrame.MAXIMIZED_BOTH
имеет тот же эффект, что иtopFrame.MAXIMIZED_BOTH
, но статический доступ к нему правильный. Чтобы вывести рамку на передний план, используйтеtoFront
илиrequestFocusInWindow
. - person user1803551   schedule 21.05.2014