最小化/最大化父JFrame

时间:2014-05-21 11:59:33

标签: java swing parent-child minimize maximize

我正在进行测验申请。当一个团队按下按钮时,他们仍然不能看到问题或看到视频/音频片段。这种信息显示在添加到父JFrame的测验视图(这是一个jpanel)中。我试图做的是在从团队推送按钮时最小化JFrame。这非常有效。如果按下按钮,管理员会在其视图中弹出一个按钮。如果答案不正确,JFrame应该再次最大化。因此,如果答案不正确,当他按下按钮时,测验模型中的布尔值将设置为true($ maximize)。我们然后更新视图。在更新视图时我会检查布尔值是否设置为true。如果是,我称之为最大化方法。当答案错误时,再次将其最大化。最大限度地减少工作,但不是最大化。

任何人都知道什么是错的?

这是我在视图中的代码,这个视图是更大的JFrame中的JPanel,其中最大化发生:

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

}

[编辑]减少了代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案是使用topFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);而不是setState。 Setstate只设置当前帧的状态,因为我需要父帧我需要使用setExtendedState。

还错过了一些布尔值,以便在需要时最大化/最小化。