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
.
Make it not resizable:
frame.setResizable(false);
You will still have the minimize and close buttons.
You can't remove the button from a JFrame
. Use a JDialog
instead. It doesn't have a maximize button.
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);
}
} }
In JFrame properties -> maximumSize = minimumSize. And resizable = false. Done! The button is disabled.
/**
* 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;
}
}
}
}
}
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);
}
}
}
Go to JFrame's property and set resizeable unchecked.
frame.setUndecorated(true)
this will remove maximize button as well as close and minimize button.
If you are using Netbean then just unselect the resizable option in properties. It will only disable Minimize/Maximize Button.
来源:https://stackoverflow.com/questions/5625436/how-can-i-remove-just-the-maximize-button-from-a-jframe