Estoy armando una animación rápida y sucia usando swing. Me gustaría maximizar la ventana. ¿Cómo puedo hacer eso?
89
Estoy armando una animación rápida y sucia usando swing. Me gustaría maximizar la ventana. ¿Cómo puedo hacer eso?
Siempre que esté ampliando JFrame:
public void run() {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
JFrame.MAXIMIZED_BOTH
lugar.setVisible(true)
primero, el marco no tiene el tamaño correcto. Lo probé tanto antes como despuéssetExtendedState()
, ysetVisible()
debo ser el primero.JFrame
hereda deFrame
).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); } }
fuente
|
? ¿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.Si está utilizando un JFrame, intente esto
JFrame frame = new JFrame(); //... frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
fuente
¿Qué tal
JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)
?fuente
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); } }
fuente
La forma de configurar JFrame en pantalla completa es establecer la
MAXIMIZED_BOTH
opción que significaMAXIMIZED_VERT | MAXIMIZED_HORIZ
, que respectivamente configura el marco para maximizar vertical y horizontalmentepackage 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); } }
fuente
Probé las soluciones en este hilo y las de aquí , pero simplemente llamar
setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH);
justo después de llamarsetVisible(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); } } ); } }
fuente
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.
fuente
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.
fuente