2011-04-11 59 views
29

Tengo un JFrame y quiero quitar el maximizar el botón de eso.¿Cómo puedo eliminar solo el botón Maximizar de un JFrame?

Escribí el siguiente código, pero se eliminó maximizar, minimizar y cerrar desde mi JFrame.

JFrame frame = new JFrame(); 
frame.add(kart); 
frame.setUndecorated(true); 
frame.setVisible(true); 
frame.setSize(400, 400); 

Solo quiero quitar el botón de maximizar del JFrame.

+1

esto * might * help: http://geekycoder.wordpress.com/2009/07/17/java-tips-disabling-the-maximize-button-of-jframe/ – MByD

Respuesta

56

hacer que no puede cambiar de tamaño:

frame.setResizable(false); 

Usted todavía tiene el botón de cierre y minimizar.

+0

En mi Mac, deshabilita el botón '+'. ¿Realmente elimina el botón Maximizar? – khachik

+0

Lo hace en Linux ... En cualquier caso, no cambiar el tamaño es lo que el OP intenta lograr, ¿verdad? – sjr

+0

No estoy tratando de decir que has publicado algo mal. Solo interesante. +1, buena respuesta, de todos modos. – khachik

8

No puede quitar el botón de JFrame. Use un JDialog en su lugar. No tiene un botón de maximizar

+1

JDialog tampoco tiene un minimizar botón, que puede o no ser un problema. – Boann

3
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent;  
import javax.swing.JDialog; import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Test extends JDialog { 
    public Test(JFrame frame, String str) { 
     super(frame, str); 
     addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent evt) { 
       System.exit(0); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     try { 
      Test myFrame = new Test(new JFrame(), "Removing maximize button"); 
      JPanel panel = new JPanel(); 
      panel.setSize(100, 100); 
      myFrame.add(panel); 
      myFrame.setSize(100, 100); 
      myFrame.setVisible(true); 
     } catch (IllegalArgumentException e) { 
      System.exit(0); 
     } 
    } } 
+0

¿Puedes explicarme un poco más sobre lo que hace? – Matthieu

1

There se describe cómo implementar un "JFrame" sin maximizar y minimizar los botones. Sólo se necesita "incapsulate" un JFrame en JDialog:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class RemoveMaxAndMinButton extends JDialog{ 
    public RemoveMaxAndMinButton(JFrame frame, String str){ 
    super(frame,str); 
    addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent evt){ 
     System.exit(0); 
      } 
     }); 
    } 
    public static void main(String[] args){ 
    try{ 
     RemoveMaxAndMinButton frame = new RemoveMaxAndMinButton(new JFrame(), 
      "Remove the Minimize and Maximize button from the Title Bar"); 
     JPanel panel = new JPanel(); 
     panel.setSize(200,200); 
     JLabel lbl = new JLabel("RoseIndia.Net"); 
     panel.add(lbl); 
     frame.add(panel); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
    catch(IllegalArgumentException e){ 
     System.exit(0); 
    } 
    } 

}

+0

Esto no es un 'JFrame' sin minimizar/maximizar botones. Es solo un 'JDialog' normal. – Martin

1
/** 
* Removes the buttons from the JDialog title frame. This is a work around 
* to removing the close button 
* 
* This is confirmed to work with the Metal L&F 
*/ 
public void removeAllTitleFrameButtons() { 

    /* Get the components of the dialog */ 
    Component[] comps = this.getRootPane().getComponents(); 

    /* Indicator to break from loop */ 
    boolean breakFromLoop = false; 

    /* 
    * Go through the components and find the title 
    * pane and remove the buttons. 
    */ 
    for(Component comp : comps) { 
     /* Shall we break from loop */ 
     if(breakFromLoop) break; 
     if(comp.getClass().getName().indexOf("JLayeredPane") >0) { 
      for(Component jcomp : ((JLayeredPane)comp).getComponents()) { 
       if(jcomp.getClass().getName().indexOf("Title") > 0) { 

        /* Get the XXXXTitlePane Components */ 
        Component[] titlePaneComps = ((JComponent)jcomp).getComponents(); 

        for(Component tpComp : titlePaneComps) { 
         if(tpComp instanceof JButton) { 
          ((JButton)tpComp).setVisible(false);       
         } 
        } 
        /* No need to continue processing */ 
        breakFromLoop = true; 
        break; 
       } 
      } 
     } 
    } 
} 
+0

--- simplemente elimine la declaración de "interrupción" para eliminar y actualizar el "si" si es necesario. Lo uso para eliminar el botón de cerrar. – Gino

+0

posible solo si el marco está decorado con LAF – kleopatra

3

En propiedades de JFrame -> maximumSize = minimumSize. Y redimensionable = falso. ¡Hecho! El botón está deshabilitado.

+1

¿Está usted en un editor? no funciona en netbeans ... –

-1

Si está utilizando Netbean, simplemente desmarque la opción redimensionable en las propiedades. Solo deshabilitará el botón Minimizar/Maximizar.

Cuestiones relacionadas