Jendela JFrame Maximize

90

Saya menyusun animasi cepat dan kotor menggunakan ayunan. Saya ingin jendela dimaksimalkan. Bagaimana saya bisa melakukan itu?

Nggak
sumber

Jawaban:

134

Asalkan Anda memperluas JFrame:

public void run() {
    MyFrame myFrame = new MyFrame();
    myFrame.setVisible(true);
    myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
kgiannakakis
sumber
13
Mengakses bidang statis melalui sebuah instance adalah praktik yang buruk. Gunakan JFrame.MAXIMIZED_BOTHsebagai gantinya.
nimcap
3
Bug besar dan masif dan masalah di atas! (Yah, oke oke, peringatan kecil tanpa konsekuensi besar ...) Harus Frame.MAXIMIZED_BOTH bukan JFrame.MAXIMIZED_BOTH! :)
Manius
Mengapa Anda memanggil setVisible (true) terlebih dahulu? Apakah itu penting? Ini juga berfungsi dengan baik tanpa (ubuntu).
AvrDragon
1
Tanpa setVisible(true)terlebih dahulu, bingkai tidak berukuran benar. Saya mencobanya sebelum dan sesudah setExtendedState(), dan setVisible()harus menjadi yang pertama.
mjibson
2
@Crusader Benar-benar tidak ada masalah di sini, karena keduanya mengacu pada bidang konstan yang sama ( JFramediwarisi dari Frame).
Guillaume Polet
18

Sesuatu seperti 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);
    }
}
VonC
sumber
Apa |untuk? Apakah itu melakukan satu, dan jika gagal, apakah yang lain? Atau apakah Anda menunjukkan pilihan programmer (yaitu memilih salah satu dari A | B untuk digunakan dalam panggilan ini?) Saya belum pernah melihat sintaks ini sebelumnya.
Pureferret
@ Pureferret itu adalah operator "bitwise inclusive OR", yang menyalin sedikit jika ada di salah satu operand. ( docs.oracle.com/javase/tutorial/java/nutsandbolts/… atau tutorialspoint.com/java/java_basic_operators.htm )
VonC
14

Jika Anda menggunakan JFrame, coba ini

JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
pengguna54579
sumber
2

saya suka versi ini:

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);
    }
}
frame_max_show
sumber
Saya suka versi ini. Terima kasih banyak.
SWIIWII
2

Cara mengatur JFrame ke full-screen, adalah dengan mengatur MAXIMIZED_BOTHoption yang mana MAXIMIZED_VERT | MAXIMIZED_HORIZ, masing-masing mengatur frame untuk dimaksimalkan secara vertikal dan horizontal.

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);
    }
}
Greg Reynolds
sumber
2

Saya sudah mencoba solusi di utas ini dan yang ada di sini , tetapi hanya menelepon setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);tepat setelah menelepon setVisible(true);tampaknya tidak berfungsi untuk lingkungan saya (Windows 10, JDK 1.8, bilah tugas saya ada di sisi kanan layar saya). Melakukannya dengan cara ini masih menyisakan sedikit ruang di kiri, kanan dan bawah.

Namun, yang berhasil untuk saya adalah memanggil setExtendedState(...saat jendela diaktifkan, seperti:

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);
                }
            }
        );
    }
}
TT.
sumber
1
Saya memiliki masalah serupa di Windows 10 dengan bilah tugas di bagian bawah layar. Jendela terlalu tinggi dan karena itu tumpang tindih dengan bilah tugas. Solusi Anda berhasil!
ConveniencePatterns
0

Saya akhirnya menggunakan kode ini:

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

Opsi ini bekerja paling baik dari semua opsi, termasuk dukungan beberapa monitor. Satu-satunya kelemahan yang dimilikinya adalah bahwa offset bilah tugas yang digunakan pada semua monitor adalah beberapa konfigurasi.

Wouter
sumber
0

Jawaban @kgiannakakis sepenuhnya benar, tetapi jika seseorang terjebak dalam masalah ini dan menggunakan Java 6 di Linux (misalnya, Mint 19 Cinnamon), status MAXIMIZED_BOTH terkadang tidak diterapkan.

Anda bisa mencoba memanggil metode pack () setelah mengatur status ini.

Contoh kode:

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

Ini tidak diperlukan jika Anda menggunakan Java 7+ atau Java 6 di Windows.

dreamwalker
sumber