如何在 JFrame 标题栏上放置按钮

问题描述 投票:0回答:2

我想在 JFrame 标题栏上放置一个按钮,如下图所示。



当我使用 button.setBounds() 设置按钮的边界时,按钮隐藏在标题栏下方,如下所示。


我在下面给出了我尝试过的代码。

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);
       }
    }

非常感谢任何帮助。

java swing user-interface jframe setbounds
2个回答
1
投票

您可以像这样将框架设置为未装饰

frame.setUndecorated(true);

注意:在

frame.setVisiblle(true);

之前添加此语句

0
投票

晚了两年,但我能够在没有

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);
...

Example Image

© www.soinside.com 2019 - 2024. All rights reserved.