禁用JFrame最小化按钮

10

我正在为我的笔记本电脑开发一个工具。我想禁用JFrame中的最小化按钮。我已经禁用了最大化和关闭按钮。

以下是禁用最大化和关闭按钮的代码:

JFrame frame = new JFrame();  
frame.setResizable(false); //Disable the Resize Button  
// Disable the Close button
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
请告诉我如何禁用最小化按钮。

"请告诉我如何禁用最小化按钮。" 请不要这样做。 - Andrew Thompson
这里的GUI的实际目标是什么?它是一个信息亭吗? - Andrew Thompson
在笔记本电脑上向用户显示电池充电信息。 - Pankaj Kumar Thapa
谢谢你的解释。你在Java中是如何找到那个值的? - Andrew Thompson
5个回答

10

正如@MadProgrammer所说(对他+1),这绝对不是一个好主意,您最好使用JDialog并调用setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);以确保它不能被关闭。

  • 您还可以使用JWindow(对@M. M. +1)或在JFrame实例上调用setUndecorated(true);

  • 或者您可能希望添加自己的WindowAdapter,通过覆盖windowIconified(..)并从该方法中调用setState(JFrame.NORMAL);来使JFrame无法最小化等:

//necessary imports
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Test {

    /**
     * Default constructor for Test.class
     */
    public Test() {
        initComponents();
    }

    public static void main(String[] args) {

        /**
         * Create GUI and components on Event-Dispatch-Thread
         */
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test test = new Test();
            }
        });
    }
    private final JFrame frame = new JFrame();

    /**
     * Initialize GUI and components (including ActionListeners etc)
     */
    private void initComponents() {
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.setResizable(false);
        frame.addWindowListener(getWindowAdapter());

        //pack frame (size JFrame to match preferred sizes of added components and set visible
        frame.pack();
        frame.setVisible(true);
    }

    private WindowAdapter getWindowAdapter() {
        return new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent we) {//overrode to show message
                super.windowClosing(we);

                JOptionPane.showMessageDialog(frame, "Cant Exit");
            }

            @Override
            public void windowIconified(WindowEvent we) {
                frame.setState(JFrame.NORMAL);
                JOptionPane.showMessageDialog(frame, "Cant Minimize");
            }
        };
    }
}

在Mac上,windowIconified的工作方式有些奇怪。JFrame会被最小化一秒钟,然后回到屏幕上,然后显示messageDialog。 - Manish

10

通常情况下,您不能这样做,您可以使用JDialog来替换JFrame


8
如果您不想允许任何用户操作,请使用 JWindow

另请参阅全屏独占模式API。如果要制作一个可以绘制屏幕上每个像素的应用程序,它非常方便。 - Andrew Thompson

6
您可以尝试将JFrame类型更改为UTILITY。这样,您的程序中将不会看到最小化按钮和最大化按钮。

2
我建议您使用 jframe.setUndecorated(true),因为您没有使用任何窗口事件,并且不希望应用程序被调整大小。如果您想要移动面板,请使用我制作的MotionPanel

人们仍然可以通过在 Windows 任务栏中单击图标来最小化 JFrame。 - Peter Gordon
在这种情况下,您可以最小化到系统托盘。 - Sorter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接