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

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

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

这是使用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); } } 

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

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

目前,在保持标题栏和关闭按钮的同时删除最大化和最小化按钮的唯一方法是使用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); } } 

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

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

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

你可以试试这个:

 JFrame loadingDialog = new JFrame(); JLabel label = new JLabel("blah blah"); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(400, 400)); panel.add(label); loadingDialog.add(panel); loadingDialog.setUndecorated(true); loadingDialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE); loadingDialog.pack(); loadingDialog.setVisible(true);