是否可以在 Java 中创建某种具有框架和边框但没有标题按钮(最小化、恢复、关闭)的 Window 对象。
当然,我无法使用该undecorated
设置。此外,窗口需要:
- 有一个平台渲染的边框
- 有一个标题栏
- 没有字幕按钮。如果需要,我会以编程方式处理窗口。
- 使用默认值或
System
外观
这是一个例子:
这是关于
未装饰Compound BordersJDialog
,然后您可以创建来自 Native OS 的类似或更好的 Borders
创建JPanel
(或JLabel#opaque(true)
)GradientPaint
或(更好non_focusable
==我的观点)JLabel
准备好Icon
添加到/JPanel
组件移动器/组件调整大小(注意,永远不要将这两个代码混合在一起)@camickrJLabel
设置Alpha Transparency
为绘画JPanel
/JLabel
伟大look and feel
最简单的方法放在那里JMenuBar
最简洁的答案是不。
更长的答案可能是,但您需要调查 JNI/JNA 实现
试试这个小例子。它将从 JFrame 中删除(不仅禁用)最小化、最大化和关闭按钮。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Example {
public void buildGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setResizable(false);
removeButtons(frame);
JPanel panel = new JPanel(new GridBagLayout());
JButton button = new JButton("Exit");
panel.add(button,new GridBagConstraints());
frame.getContentPane().add(panel);
frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
System.exit(0);
}
});
}
public void removeButtons(Component comp) {
if(comp instanceof AbstractButton) {
comp.getParent().remove(comp);
}
if (comp instanceof Container) {
Component[] comps = ((Container)comp).getComponents();
for(int x=0, y=comps.length; x<y; x++) {
removeButtons(comps[x]);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Example().buildGUI();
}
});
}
}