How can I remove just the Maximize button from a JFrame?
Asked Answered
A

8

37

I have a JFrame and want to remove the maximize button from that.

I wrote the code below, but it removed maximize, minimize, and close from my JFrame.

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

I want to only remove the maximize button from the JFrame.

Azotobacter answered 11/4, 2011 at 18:0 Comment(1)
this might help: geekycoder.wordpress.com/2009/07/17/…Eccentricity
C
75

Make it not resizable:

frame.setResizable(false);

You will still have the minimize and close buttons.

Contrayerva answered 11/4, 2011 at 18:21 Comment(4)
On my mac it disables the + button. Does it really remove the maximize button?Centurion
It does on Linux... In any case, no resize is what the OP is trying to achieve right?Contrayerva
I'm not trying to say you posted something wrong. Just interesting. +1, good answer, anyway.Centurion
may disable, but does not removeWynny
D
8

You can't remove the button from a JFrame. Use a JDialog instead. It doesn't have a maximize button.

Dekker answered 11/4, 2011 at 18:11 Comment(1)
JDialog also doesn't have a minimize button, which may or may not be a problem.Benedikta
G
3

In JFrame properties -> maximumSize = minimumSize. And resizable = false. Done! The button is disabled.

Griffey answered 18/5, 2013 at 22:35 Comment(1)
This is not a solution for special cases where one wants to be still able resizing the jFrame in one direction only, like let's say vertically (that is changing jFrame height - my case)., cos this way it would be disabled completely as whole.Islam
M
2
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);
        }
    } }
Merridie answered 11/4, 2011 at 18:11 Comment(2)
Can you explain a bit more on what it does?Juggernaut
You used a JDialog instead of a JFrame. JDialog and JFrame have different behaviour, so just using a JDialog is not an universally applicable solution for the question.Euchre
T
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();
    
    /*
     * Go through the components and find the title 
     * pane and remove the buttons.  
     */
    outerloop:
    for(Component comp : comps) {
        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 */
                    break outerloop;
                }
            }
        }
    }
}
Tedric answered 13/4, 2012 at 12:49 Comment(3)
--- just remove the "break" statement to remove and update the "if" if necessary. I use this to remove the close button.Tedric
possible only if the frame is decorated by the LAFBeater
@Beater Exactly: this does not work without the LAF as there is no component which class name would contain word "Title" (at least in that specific loop) in case "this" points to main JFrame.Islam
S
1

Go to JFrame's property and set resizeable unchecked.

Sejant answered 1/7, 2019 at 21:14 Comment(0)
L
-1

There is described how to implement a "JFrame" without maximize and minimize buttons. You need just "incapsulate" a JFrame in 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);
    }
  } 

}

Lichtenfeld answered 11/4, 2011 at 18:12 Comment(1)
This is not a JFrame without minimize/maximize buttons. It’s just a regular JDialog.Excreta
H
-1

If you are using Netbean then just unselect the resizable option in properties. It will only disable Minimize/Maximize Button.

Hogback answered 7/7, 2015 at 19:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.