Saya menyusun animasi cepat dan kotor menggunakan ayunan. Saya ingin jendela dimaksimalkan. Bagaimana saya bisa melakukan itu?
Jawaban:
Asalkan Anda memperluas JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
setVisible(true)
terlebih dahulu, bingkai tidak berukuran benar. Saya mencobanya sebelum dan sesudah setExtendedState()
, dan setVisible()
harus menjadi yang pertama.
JFrame
diwarisi dari Frame
).
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);
}
}
|
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.
Jika Anda menggunakan JFrame, coba ini
JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Bagaimana dengan JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)
?
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);
}
}
Cara mengatur JFrame ke full-screen, adalah dengan mengatur MAXIMIZED_BOTH
option 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);
}
}
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);
}
}
);
}
}
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.
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.
JFrame.MAXIMIZED_BOTH
sebagai gantinya.