JFrame Büyütme penceresi


90

Salıncak kullanarak hızlı ve kirli bir animasyon oluşturuyorum. Pencerenin maksimize edilmesini istiyorum. Bunu nasıl yapabilirim?

Yanıtlar:


134

JFrame'i genişletmeniz şartıyla:

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

13
Bir örnek üzerinden statik alana erişmek kötü bir uygulamadır. JFrame.MAXIMIZED_BOTHBunun yerine kullanın .
nimcap

3
Yukarıdakilerle ilgili çok büyük, büyük hata ve sorunlar! (Pekala, tamam, önemli bir sonucu olmayan küçük uyarılar ...) JFrame.MAXIMIZED_BOTH değil, Frame.MAXIMIZED_BOTH olmalıdır! :)
Manius

Neden önce setVisible (true) 'yu çağırıyorsunuz? Önemli mi? Ayrıca (ubuntu) olmadan da iyi çalışır.
AvrDragon

1
setVisible(true)İlk olmadan , çerçeve doğru boyutlandırılmaz. Hem önce hem de sonra denedim setExtendedState()ve setVisible()ilk olmalı.
mjibson

2
@Crusader Aslında burada kesinlikle sorun yok, çünkü ikisi de aynı sabit alana atıfta bulunuyor ( JFramemiras alan Frame).
Guillaume Polet

18

Gibi bir şey 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);
    }
}

Ne |için? Birini yapıyor mu ve başarısız olursa diğerini mi yapıyor? Yoksa programcı seçimini mi gösteriyorsunuz (yani bu çağrıya gitmek için A | B'den birini seçin?) Bu sözdizimini daha önce görmemiştim.
Pureferret

@Pureferret, her iki işlenende varsa bir biti kopyalayan "bitsel kapsayıcı OR" operatörüdür. ( docs.oracle.com/javase/tutorial/java/nutsandbolts/… veya tutorialspoint.com/java/java_basic_operators.htm )
VonC

14

Bir JFrame kullanıyorsanız, bunu deneyin

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


2

bu sürümü beğendim:

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

Bu versiyonu seviyorum. Çok teşekkür ederim.
SWIIWII

2

JFrame'i tam ekrana ayarlamanın yolu, çerçeveyi sırasıyla dikey ve yatay olarak büyütecek şekilde ayarlayan MAXIMIZED_BOTHseçeneği MAXIMIZED_VERT | MAXIMIZED_HORIZbelirlemektir.

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

Ben bu iplik çözümleri ve olanları denedim burada ama sadece çağıran setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);çağrıldıktan sonra sağ setVisible(true);görünüşte benim çevre için çalışma yapmaz (Windows 10, JDK 1.8, benim görev çubuğu benim ekranın sağ tarafında). Bu şekilde yapmak solda, sağda ve altta hala küçük bir boşluk bırakır.

Ancak benim için işe yarayan şey setExtendedState(..., pencere etkinleştirildiğinde şu şekilde aramak oldu:

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
Windows 10'da ekranın altındaki görev çubuğuyla benzer bir sorun yaşadım. Pencere çok yüksekti ve bu nedenle görev çubuğu ile örtüşüyordu. Çözümünüz işe yaradı!
ConveniencePatterns

0

Bu kodu kullandım:

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

Bu seçenekler, çoklu monitör desteği dahil tüm seçeneklerden en iyi şekilde çalıştı. Bunun sahip olduğu tek kusur, görev çubuğu ofsetinin tüm monitörlerde kullanılmasıdır. Bazı yapılandırmalar.


0

@kgiannakakis cevabı tamamen doğru, ancak kimse bu sorunla sıkışmış ve kullanıyorsa Java 6 üzerinde Linux (örnek, Nane 19 Tarçın), MAXIMIZED_BOTH devlet bazen uygulanmaz.

Paketi aramayı deneyebilirsiniz ()Bu durumu ayarladıktan sonra yöntemini .

Kod örneği:

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'ta Java 7+ veya Java 6 kullanıyorsanız bu gerekli değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.