[英]How to remove minimize button and keep maximize and close button in JFrame
我只想从JFrame中删除最小化按钮,但是想要JFrame标题栏中的最大化和关闭按钮。
在这里我说的是删除不禁用。
我认为删除最小化按钮不是一件好事。 但是也许您可以使用setUndecorated()方法删除标题栏和窗口边缘。 而且,您必须添加自己的关闭按钮和最大化按钮才能执行这些操作。
这是一个例子:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.JButton;
public class Example {
public Example() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true);//<---- this will disable the frame decorations
JPanel panel = new JPanel();
panel.add(new JLabel("titlebar"));
//Add button maximize
JButton button_max=new JButton("Maximize");
button_max.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if(frame.getExtendedState() == JFrame.NORMAL) {
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
} else {
frame.setExtendedState(JFrame.NORMAL);
}
}
});
panel.add(button_max);
//Add button close
JButton button_close = new JButton(new AbstractAction("Close") {
private static final long serialVersionUID = -4901571960357967734L;
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
panel.add(button_close);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
编辑:
正如@peeskillet在评论中指出的那样,即使使用此方法,窗口仍可以由用户调整大小和拖动。 ComponentResizer类允许这样做。
这是一条SO 帖子 ,它提供了一个将此类与Jframe
一起使用的好例子。
这是一个非常大的hack,仅与Synthetica L&F一起使用,因为它提供了一个绘制的标题栏。 注意:此L&F不能免费使用。 因此,如果您使用它,则必须获得许可证。
使用此L&F时,可以从根窗格开始迭代所有组件,以找到SyntheticaTitlePane
的实例。 成功后,您可以尝试使用反射框架访问字段iconifyAction
并对其使用方法Action.setEnabled(false)
。
我不知道如何访问标准标题栏,因为它是本地的。 可能是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.