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

Posted

技术标签:

【中文标题】如何从 JFrame 中仅删除最大化按钮?【英文标题】:How can I remove just the Maximize button from a JFrame? 【发布时间】:2011-08-03 06:48:51 【问题描述】:

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

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

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

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

【问题讨论】:

可能帮助:geekycoder.wordpress.com/2009/07/17/… 【参考方案1】:

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

【讨论】:

JDialog 也没有最小化按钮,这可能是也可能不是问题。【参考方案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);
        
     

【讨论】:

你能解释一下它的作用吗? 您使用了 JDialog 而不是 JFrame。 JDialog 和 JFrame 具有不同的行为,因此仅使用 JDialog 并不是该问题的普遍适用的解决方案。【参考方案3】:

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

【讨论】:

这不是没有最小化/最大化按钮的JFrame。这只是一个普通的JDialog【参考方案4】:

使其不可调整大小:

frame.setResizable(false);

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

【讨论】:

在我的 Mac 上,它禁用了 + 按钮。它真的删除了最大化按钮吗? 它在 Linux 上运行......无论如何,OP 试图实现的不是调整大小对吗? 我并不是想说您发布的内容有误。只是有趣。 +1,好答案,无论如何。 可以禁用,但不会删除【参考方案5】:
/**
 * 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;
                
            
        
    

【讨论】:

--- 只需删除“break”语句即可删除并在必要时更新“if”。我用它来删除关闭按钮。 只有在框架由 LAF 装饰时才可能【参考方案6】:

在 JFrame 属性中 -> maximumSize = minimumSize。并且可调整大小=假。完毕!该按钮已禁用。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

转到 JFrame 的属性并设置 resizeable 未选中。

【讨论】:

【参考方案9】:

将类型属性更改为实用程序。它只会显示关闭按钮。

【讨论】:

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

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

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

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

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

如何通过代码最大化 JFrame?

如何从 JFrame 中删除 JPanel?