3
public static void main(String args[]){
    JFrame frame = new JFrame();
    frame.setExtendedState(JFrame.MAXIMISED_BOTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

このコードを使用して JFrame を最大化しましたが、実際にフレームを最大化する代わりに、状態を実際に変更せずにウィンドウ サイズを画面のサイズに設定するだけなので、最大化ボタンをクリックしても実際には再度縮小されません。

間違ったコマンドか何かを使用していますか?

4

8 に答える 8

4

エラーがありますframe.setExtendedState(JFrame.MAXIMISED_BOTH);

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);代わりに書くべきです

于 2016-03-27T19:49:29.837 に答える
0

デフォルトで最大化する必要があります。最大化ボタンはすぐに使用できるためです。

frame.setExtendedState(JFrame.MAXIMIZED_BOTH)Linux x64 で動作します。これが私がテストしたプログラムです:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test implements ActionListener {

  public static void main(String... args) {
    new Test();
  }

  private JFrame frame;

  public Test() {
    frame = new JFrame();
    frame.add(new JLabel("Hi!"), BorderLayout.CENTER);
    JButton button = new JButton("maximize");
    button.addActionListener(this);
    frame.add(button, BorderLayout.SOUTH);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  }
}
于 2013-09-23T21:27:05.683 に答える
0

これを試しましたか?

f.setExtendedState(f.getExtendedState() | JFrame.MAXIMIZED_BOTH);
于 2013-09-23T21:34:30.740 に答える
0

これは私のために働いた:

setSize () と setExtendedState を組み合わせる必要があります。 JFrame frame=new JFrame();

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); // aligns itself with windows task bar
// set maximum screen   
frame.setSize((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());
于 2014-04-26T10:48:33.403 に答える
0

7年遅れたほうがいいですよね?

おそらくこれが関連するすべてのコードではないため、質問はSSCCEを提供しません。コードの小さな断片がそのまま機能するため、実際には以前のすべての回答は「私にとっては機能する」と言っています。したがって、問題は確かにコードの残りの部分にありますが、表示されていません。

コードの残りの部分が何をしているのかはわかりませんが、フレームの状態と境界を保持し、後でその状態と境界を復元しようとして、それが失敗したのではないかと思います。OPは、実際の問題が何であるかを説明していなかったため、7年前に回答を受け取りませんでしたが、この質問はさらに多くの人に見られるため、次のようになります。

理論的には、フレームの状態と境界を保持することは簡単なはずですが、実際にはそうではありません。

これは GUI アプリケーションでよくある問題で、基本的にはプログラマーのよくある間違いによるものです。ただし、広く使用されているさまざまな GUI フレームワーク (および Java の世界では Swing と SWT の両方) は特定のひねくれた方法で動作するため、非常に簡単に間違いを犯してしまうことに注意してください。

問題は、これらのフレームワークが「最大化」イベントをサポートしていないという事実から始まります (当たり前!)。そのため、フレームが最大化されたことを検出できる唯一の方法は、「サイズ変更」イベントをリッスンすることです。したがって、おそらく「サイズ変更」イベントハンドラー内からフレームの状態と寸法を保持しています。

フレームを最大化した結果として「サイズ変更」イベントが発生すると、フレームの境界はフレームの最大化された境界であり、これは無関係であるという事実によって、問題はさらに複雑になります。あなたはそれらを永続化するという間違いを犯します。

したがって、解決策は、フレームの「通常の状態」の境界を手動で追跡し、それらのみを保持することです。これは次のように実行できます。

    addComponentListener( new ComponentAdapter()
    {
        @Override public void componentResized( ComponentEvent e )
        {
            if( (getExtendedState() & MAXIMIZED_HORIZ) == 0 )
                normalStateBounds.width = getWidth();
            if( (getExtendedState() & MAXIMIZED_VERT) == 0 )
                normalStateBounds.height = getHeight();
            stateAndOrSizeChanged();
        }
        @Override public void componentMoved( ComponentEvent e )
        {
            if( (getExtendedState() & MAXIMIZED_HORIZ) == 0 )
                normalStateBounds.x = getX();
            if( (getExtendedState() & MAXIMIZED_VERT) == 0 )
                normalStateBounds.y = getY();
            stateAndOrSizeChanged();
        }
    } );

...どこ:

  • normalStateBoundsprivate final Rectangle normalStateBounds = new Rectangle();「通常の」(最小化も最大化もされていない) 状態のときのコンポーネントの境界として定義され、それを含みます。

  • stateAndOrSizeChanged()フレームの状態と境界の永続化を処理する関数normalStateBoundsです。getX()getY()getWidth()getHeight()

永続性から状態と境界をロードするときは、単に を呼び出してから を呼び出すことができます。最大化する前にフレームが瞬く間に復元されたように見える可能性を避けるために、呼び出す前にこれを行う必要がありsetBounds()ます。を呼び出すと最大化されていない境界が設定され、 を呼び出すとフレームが最大化される可能性がありますが、その後復元すると、設定した最大化されていない境界が想定されます。setExtendedState()setVisible( true )setBounds()setExtendedState()

于 2021-04-15T15:51:57.193 に答える
-1

WinXPマシンでJava 7を実行している私にとってはうまくいきます。

記録として、SSCCE は次のようになります。

import javax.swing.*;

public class JFrameExtendedDemo
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 200);
        f.setLocationRelativeTo(null);
        f.setVisible(true);

        // Then:
        f.setExtendedState(JFrame.MAXIMIZED_BOTH);
      }
    });
  }
}
于 2013-09-23T21:46:33.130 に答える