Je suis en train de mettre en place une animation rapide et sale en utilisant swing. Je voudrais que la fenêtre soit maximisée. Comment puis je faire ça?
Pourvu que vous étendiez JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
Quelque chose comme 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);
}
}
Si vous utilisez un JFrame, essayez ceci
JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Que diriez-vous de JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)
?
Cette page peut fournir de l'aide
j'aime cette version:
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);
}
}
J'ai fini par utiliser ce code:
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);
}
}
Cette option fonctionnait de manière optimale, y compris la prise en charge de plusieurs moniteurs. Le seul défaut que cela a est que le décalage de la barre des tâches est utilisé sur tous les moniteurs dans certaines configurations.
J'ai essayé les solutions de ce fil et celles ici , mais appeler simplement setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
juste après avoir appelé setVisible(true);
ne fonctionne apparemment pas pour mon environnement (Windows 10, JDK 1.8, ma barre des tâches est à droite de mon écran). ). Le faire de cette façon laisse toujours un espace minuscule à gauche, à droite et en bas.
Ce qui a fonctionné pour moi cependant, c'est d'appeler setExtendedState(...
quand la fenêtre est activée, comme ceci:
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);
}
}
);
}
}