我想在 JFrame 标题栏上放置一个按钮,如下图所示。
我在下面给出了我尝试过的代码。
public class SetBoundsTest {
public static void main(String arg[]) {
JFrame frame = new JFrame("Test Frame");
frame.setSize(500, 250);
// Setting layout as null
frame.setLayout(null);
// Creating Button
JButton button = new JButton("Test");
// Setting position and size of a button
button.setBounds(150,-20,120,40);
button.setBorder(BorderFactory.createLineBorder(Color.BLUE, 3));
button.setBackground(Color.MAGENTA);
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
非常感谢任何帮助。
您可以像这样将框架设置为未装饰
frame.setUndecorated(true);
注意:在
frame.setVisiblle(true);
之前添加此语句
晚了两年,但我能够在没有
frame.setUndecorated(true)
的情况下直接使用 FlatLaf 和本教程来做到这一点:https://www.youtube.com/watch?v=uWlfe_O12lY
请记住,如果以这种方式使用,FlatLaf 可能无法在所有系统中保持一致。
FlatLaf github 存储库:https://github.com/JFormDesigner/FlatLaf
启动器
.show()
只是我在演示项目中初始化其他面板/对象的函数。
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
try {
FlatLaf.registerCustomDefaultsSource("com.testui.themes");
FlatDarculaLaf.setup();
new EpicWindow().show();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
});
}
FlatLaf.properties 配置
com/testui/themes/FlatLaf.properties
TitlePane.unifiedBackground=false
按钮!
然后无论您将面板加载到 jframe 中,都需要创建一个 JMenuBar
...
// Just an example..
JPanel jPanel = new JPanel(new BorderLayout());
JButton btn = new JButton("huh?");
JMenuBar menuBar = new JMenuBar();
menuBar.putClientProperty(FlatClientProperties.STYLE, ""
+ "borderColor:$TitlePane.background;"
+ "border:0,0,0,0");
menuBar.add(btn);
jFrameWindow.setJMenuBar(menuBar);
...