JFrame最大化ウィンドウ


89

スイングを使って、すばやく汚いアニメーションを作成しています。ウィンドウを最大化してほしい。どうやってやるの?

回答:


133

JFrameを拡張している場合:

public void run() {
    MyFrame myFrame = new MyFrame();
    myFrame.setVisible(true);
    myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}

13
インスタンスを介して静的フィールドにアクセスすることは悪い習慣です。JFrame.MAXIMIZED_BOTH代わりに使用してください。
nimcap 2010

2
巨大で巨大なバグと上記の問題!(まあ、大丈夫、大きな影響のないマイナーな警告...)JFrame.MAXIMIZED_BOTHではなくFrame.MAXIMIZED_BOTHである必要があります!:)
マニウス

なぜ最初にsetVisible(true)を呼び出すのですか?それは重要ですか?(ubuntu)がなくても問題なく動作します。
AvrDragon 2012

1
setVisible(true)最初にないと、フレームのサイズが正しくありません。私は前と後の両方でそれを試しましたsetExtendedState()、そしてsetVisible()最初でなければなりません。
mjibson 2012

2
@Crusaderどちらも同じ定数フィールドを参照しているため(JFrameから継承Frame)、実際にはまったく問題はありません。
ギヨームポレット2013年

18

何かのようなもの this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);

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

public class Test extends JFrame
{
    public Test()
    {
        GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
        this.setMaximizedBounds(env.getMaximumWindowBounds());
        this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
    }

    public static void main(String[] args)
    {
        JFrame.setDefaultLookAndFeelDecorated(true);

        Test t = new Test();
        t.setVisible(true);
    }
}

何の|ために?それは一方を行い、それが失敗した場合はもう一方を行いますか?または、プログラマーの選択を示していますか(つまり、この呼び出しに参加するためにA | Bの1つを選択しますか?)この構文はこれまで見たことがありません。
ピュアフェレット2013

@Pureferretは、「ビット単位の包括的OR」演算子であり、いずれかのオペランドに存在する場合はビットをコピーします。(docs.oracle.com/javase/tutorial/java/nutsandbolts/...又はtutorialspoint.com/java/java_basic_operators.htm
VonC

14

JFrameを使用している場合は、これを試してください

JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);


2

私はこのバージョンが好きです:

import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class Test
{
    public static void main(String [] args)
    {
        final JFrame frame = new JFrame();
        final GraphicsConfiguration config = frame.getGraphicsConfiguration();

        final int left = Toolkit.getDefaultToolkit().getScreenInsets(config).left;
        final int right = Toolkit.getDefaultToolkit().getScreenInsets(config).right;
        final int top = Toolkit.getDefaultToolkit().getScreenInsets(config).top;
        final int bottom = Toolkit.getDefaultToolkit().getScreenInsets(config).bottom;

        final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        final int width = screenSize.width - left - right;
        final int height = screenSize.height - top - bottom;

        frame.setResizable(false);
        frame.setSize(width,height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        frame.setVisible(true);
    }
}

私はこのバージョンが大好きです。どうもありがとうございます。
SWIIWII 2017年

2

JFrameをフルスクリーンに設定するMAXIMIZED_BOTH方法は、を表すオプションを設定することです。これはMAXIMIZED_VERT | MAXIMIZED_HORIZ、それぞれ垂直方向と水平方向に最大化するようにフレームを設定します。

package Example;
import java.awt.GraphicsConfiguration;
import javax.swing.JFrame;
import javax.swing.JButton;

public class JFrameExample
{
    static JFrame frame;
    static GraphicsConfiguration gc;
    public static void main(String[] args)
    {
        frame = new JFrame(gc);
        frame.setTitle("Full Screen Example");
        frame.setExtendedState(MAXIMIZED_BOTH);

        JButton button = new JButton("exit");
        b.addActionListener(new ActionListener(){@Override
        public void actionPerformed(ActionEvent arg0){
            JFrameExample.frame.dispose();
            System.exit(0);
        }});

        frame.add(button);
        frame.setVisible(true);
    }
}

2

このスレッドとここのソリューションで解決策を試しましたが、呼び出したsetExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);直後に呼び出すだけでsetVisible(true);は、私の環境では機能しないようです(Windows 10、JDK 1.8、タスクバーは画面の右側にあります)。このようにすると、左、右、下に小さなスペースが残ります。

しかし、私にとってはうまくいったのは、次のようsetExtendedState(...に、ウィンドウがアクティブ化されたときに呼び出すことです。

public class SomeFrame extends JFrame {

    public SomeFrame() {
        // ...
        setVisible(true);
        setResizable(true);
        // if you are calling setSize() for fallback size, do that here
        addWindowListener (
            new WindowAdapter() {
                private boolean shown = false;
                @Override
                public void windowActivated(WindowEvent we) {
                    if(shown) return;
                    shown = true;
                    setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
                }
            }
        );
    }
}

1
画面の下部にタスクバーがあるWindows10でも同様の問題が発生しました。ウィンドウが高すぎるため、タスクバーと重なっています。あなたの解決策はうまくいきました!
ConveniencePatterns

0

私はこのコードを使用することになりました:

public void setMaximized(boolean maximized){
    if(maximized){
        DisplayMode mode = this.getGraphicsConfiguration().getDevice().getDisplayMode();
        Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
        this.setMaximizedBounds(new Rectangle(
                mode.getWidth() - insets.right - insets.left, 
                mode.getHeight() - insets.top - insets.bottom
        ));
        this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    }else{
        this.setExtendedState(JFrame.NORMAL);
    }
}

このオプションは、マルチモニターのサポートを含むすべてのオプションの中で最も効果的でした。これにある唯一の欠点は、タスクバーオフセットがすべてのモニターで使用されることです。いくつかの構成です。


0

@kgiannakakisの答えは完全に正しいですが、誰かがこの問題に固執し、LinuxでJava 6を使用している場合(たとえば、Mint 19 Cinnamon)、MAXIMIZED_BOTH状態が適用されないことがあります。

pack()を呼び出してみることができますこの状態を設定した後、メソッドます。

コード例:

public MainFrame() {
    setContentPane(contentPanel); //some JPanel is here
    setPreferredSize(new Dimension(1200, 800));
    setMinimumSize(new Dimension(1200, 800));
    setSize(new Dimension(1200, 800));
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    pack();
}

WindowsでJava7 +またはJava6を使用している場合、これは必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.