我需要从JFrame
中移除最大化和最小化按钮。请建议如何做到这一点。
答案 0 :(得分: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);
}
}
答案 1 :(得分:9)
注意:我最初编辑了stacker的答案,但建议我创建一个新答案。
有几种方法可以自定义用户可用的窗口控件。
目前,在保留标题栏和关闭按钮的同时删除最大化和最小化按钮的唯一方法是使用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)
方法将禁用框架装饰,删除标题栏和窗口边缘。这使得用户更难以拖动,调整大小和关闭窗口,尽管并非不可能,因为这些操作仍然可以使用快捷键执行。
答案 2 :(得分: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);
}
}
}
答案 3 :(得分:0)
你可以试试这个:
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);