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

sil*_*kid 17 java swing jframe jdialog

我需要从a中删除最大化和最小化按钮JFrame.请建议如何做到这一点.

tra*_*god 14

这是一个setUndecorated()用于禁用框架装饰的相关示例.

替代文字

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class FrameTest implements Runnable {

    public static void main(String[] args) {
        EventQueue.invokeLater(new FrameTest());
    }

    @Override
    public void run() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setUndecorated(true);
        JPanel panel = new JPanel();
        panel.add(new JLabel("Stackoverflow!"));
        panel.add(new JButton(new AbstractAction("Close") {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        }));
        f.add(panel);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 9

注意:我最初编辑了堆栈器的答案,但有人建议我创建一个新的答案.

有几种方法可以自定义用户可用的窗口控件.

目前,在保持标题栏和关闭按钮的同时删除最大化和最小化按钮的唯一方法是使用a JDialog而不是JFrame:

import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class DialogDemo {

    public static void main(String[] args) {
        JDialog dialog = new JDialog(new JFrame(), "No min max buttons");
        // necessary as setDefaultCloseOperation(EXIT_ON_CLOSE) is 
        // not available for JDialogs.
        dialog.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });

        JLabel label = new JLabel("blah blah");
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(400, 400));
        panel.add(label);

        dialog.add(panel);
        dialog.pack();
        dialog.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

对话框解决方案使用户无法最小化和最大化窗口,包括通过使用快捷方式,但是它不会删除调整窗口大小的能力.

使用setResizable(false)将仅删除最大化按钮,代价是无法调整窗口大小.

最后,如trashgod所述,该setUndecorated(true)方法将禁用框架装饰,删除标题栏和窗口边缘.这使得用户更难以拖动,调整大小和关闭窗口,尽管并非不可能,因为仍然可以使用快捷键执行这些操作.


sta*_*ker 6

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Dlg extends JDialog {
    public Dlg(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 {
            Dlg frame = new Dlg(new JFrame(), "No min max buttons");
            JPanel panel = new JPanel();
            panel.setSize(200, 200);
            JLabel lbl = new JLabel("blah blah");
            panel.add(lbl);
            frame.add(panel);
            frame.setSize(400, 400);
            frame.setVisible(true);
        } catch (IllegalArgumentException e) {
            System.exit(0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你的答案是什么?你没有解释你在做什么,我也没有看到你从JFrame中删除最小/最大按钮的位置.虽然我现在看到你要去哪里,我花了一两分钟想知道这是一个什么样的答案. (3认同)