我想为JFrame
创建一个自定义标题栏。我可以使用
JFrame.setUndecorated(true)
现在我需要使用关闭按钮为我的JFrame
创建一个自定义标题栏吗?
答案 0 :(得分:2)
如果没有这样做,我想我会这样做:
JFrame
设置为未修饰的JRootPane
以添加其他字段titleBar
TitleBar
组件...... LayoutManager
上设置一个新JRootPane
(查看JRootPane.RootLayout
)并按照相应的顺序排列组件(首先是标题栏,然后是菜单栏下方,然后是内容窗格)RootPane
JFrame
的实例
醇>
也许有更好的方法。
答案 1 :(得分:0)
我不太清楚你想如何自定义关闭按钮,但这可能会指向正确的方向:How can I customize the title bar on JFrame?
编辑:这是一个关于自定义GUI的论坛的更新工作链接,以及一个用户在创建简单GUI时发布的代码:Here
看起来你可以修改他的removeComponents方法并创建一个addComponents方法来满足你的需求。
答案 2 :(得分:0)
根据以上链接的代码: (编辑为Java 8)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.logging.Level;
import java.util.logging.Logger;
class Testing {
public void buildGUI() throws UnsupportedLookAndFeelException {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame f = new JFrame();
f.setResizable(false);
removeMinMaxClose(f);
JPanel p = new JPanel(new GridBagLayout());
JButton btn = new JButton("Exit");
p.add(btn, new GridBagConstraints());
f.getContentPane().add(p);
f.setSize(400, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
btn.addActionListener((ActionEvent ae) -> {
System.exit(0);
});
}
public void removeMinMaxClose(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++) {
removeMinMaxClose(comps[x]);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
try {
new Testing().buildGUI();
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Testing.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
}
可能工作正常,但如果用户也想设置L&amp; F. 比如nimbus
答案 3 :(得分:0)