Estoy armando una animación rápida y sucia usando swing. Me gustaría maximizar la ventana. ¿Cómo puedo hacer eso?
Respuestas:
Siempre que esté ampliando JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
setVisible(true)
primero, el marco no tiene el tamaño correcto. Lo probé tanto antes como después setExtendedState()
, y setVisible()
debo ser el primero.
JFrame
hereda de Frame
).
Algo como 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);
}
}
|
? ¿Hace uno, y si eso falla, hace el otro? ¿O está indicando la elección del programador (es decir, elija uno de A | B para participar en esta llamada?) No he visto esta sintaxis antes.
me gusta esta versión:
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);
}
}
La forma de configurar JFrame en pantalla completa es establecer la MAXIMIZED_BOTH
opción que significa MAXIMIZED_VERT | MAXIMIZED_HORIZ
, que respectivamente configura el marco para maximizar vertical y horizontalmente
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);
}
}
Probé las soluciones en este hilo y las de aquí , pero simplemente llamar setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
justo después de llamar setVisible(true);
aparentemente no funciona para mi entorno (Windows 10, JDK 1.8, mi barra de tareas está en el lado derecho de mi pantalla). Hacerlo de esta manera todavía deja un pequeño espacio a la izquierda, derecha e inferior.
Sin embargo, lo que funcionó para mí es llamar setExtendedState(...
cuando la ventana está activada, así:
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);
}
}
);
}
}
Terminé usando este código:
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);
}
}
Esta opción funcionó mejor de todas las opciones, incluida la compatibilidad con varios monitores. El único defecto que tiene esto es que el desplazamiento de la barra de tareas se utiliza en todos los monitores en algunas configuraciones.
La respuesta de @kgiannakakis es completamente correcta, pero si alguien se atasca en este problema y usa Java 6 en Linux (por ejemplo, Mint 19 Cinnamon), el estado MAXIMIZED_BOTH a veces no se aplica.
Puede intentar llamar al método pack () después de establecer este estado.
Ejemplo de código:
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();
}
Esto no es necesario si está utilizando Java 7+ o Java 6 en Windows.
JFrame.MAXIMIZED_BOTH
lugar.