如何从JFrame中仅删除“最大化”按钮?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从JFrame中仅删除“最大化”按钮?相关的知识,希望对你有一定的参考价值。

我有一个JFrame,并希望从中删除最大化按钮。

我编写了下面的代码,但它从我的JFrame中删除了最大化,最小化和关闭。

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

我想只从JFrame中删除最大化按钮。

答案

使其不可调整大小:

frame.setResizable(false);

您仍将拥有最小化和关闭按钮。

另一答案

你无法从JFrame中删除该按钮。请改用JDialog。它没有最大化按钮。

另一答案
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);
        }
    } }
另一答案

在JFrame属性中 - > maximumSize = minimumSize。并且resizable = false。完成!该按钮被禁用。

另一答案
/**
 * 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描述了如何在没有最大化和最小化按钮的情况下实现“JFrame”。你需要在JDialog中“封装”一个JFrame:

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);
    }
  } 

}

另一答案

如果您使用的是Netbean,则只需取消选择属性中的resizable选项即可。它只会禁用最小化/最大化按钮。

以上是关于如何从JFrame中仅删除“最大化”按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过代码最大化 JFrame?

如何检测JFrame窗口最小化和最大化事件?

如何从 JFrame 中删除 JPanel?

如何让 JFrame 没有任务栏按钮?

如何从可调整大小的窗口中删除最小化和最大化按钮?

从使用 glfw 创建的窗口中删除最大化按钮