2012-02-27 62 views
5

Quiero establecer el tamaño máximo de JFrame al iniciar la aplicación. El problema es que, si la resolución de la pantalla es mayor, mi marco se está haciendo más grande, pero en ese momento no debería cruzar el rango máximo definido, pero el mismo caso funciona bien con baja resolución.Configuración del tamaño máximo de un JFrame al iniciar la aplicación

como yo quiero mi cuerpo sea del máximo de (500.500), por lo que escribió esta pieza de código:

JFrame frame = new JFrame("FRAME TRANSPARENT"); 
frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50), (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-150)); 
frame.setMaximizedBounds(new Rectangle(0,0 , 500, 500)); 
frame.setVisible(true); 

Incluso me puse el Bound, JFrame está considerando método setSize y parece estar que está descuidando el método setMaximizedBounds. Ya probé con el método setMaximumized, pero obtuve el mismo resultado.

+1

¿Por qué 'setMaximizedBounds' en vez de' setMaximumSize'? – wchargin

Respuesta

6

Lo he probado y que estás tan bien que setMaximumSize() no funciona .. todos estos años no podían llegar a saber que !!! Sobre todo mis requisitos de tamaño de la limitación se fija por setResizable(false), aunque veo que tiene consulta específica de tamaños mínimos y máximos a ser diferente

trabajado en una solución para usted, aunque:

public class MaxSizeUI 
{ 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new MaxSizeUI().makeUI(); 
      } 
     }); 
    } 

    public void makeUI() { 
     final JFrame frame = new JFrame("Sample Fram") { 

      @Override 
      public void paint(Graphics g) { 
       Dimension d = getSize(); 
       Dimension m = getMaximumSize(); 
       boolean resize = d.width > m.width || d.height > m.height; 
       d.width = Math.min(m.width, d.width); 
       d.height = Math.min(m.height, d.height); 
       if (resize) { 
        Point p = getLocation(); 
        setVisible(false); 
        setSize(d); 
        setLocation(p); 
        setVisible(true); 
       } 
       super.paint(g); 
      } 
     }; 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 150); 
     frame.setMaximumSize(new Dimension(400, 200)); 
     frame.setMinimumSize(new Dimension(200, 100)); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Esto hace que su marco parpadee en la pantalla cuando alcanza el ancho o alto máximo. En algunos casos, se mete en un ciclo infinito ocultándose y volviendo a aparecer. –

0

utilización dimensión
Dimension d=getMaximumSize(); Frame.setSize(d.width, d.height);

2

Una solución posible es:

Dimension DimMax = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setMaximumSize(DimMax); 

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
Cuestiones relacionadas