Java 将JLabel添加到JMenuBar并使其占用所有可用空间

Java 将JLabel添加到JMenuBar并使其占用所有可用空间,java,swing,user-interface,menu,Java,Swing,User Interface,Menu,我正在开发一个带有下拉菜单的应用程序。虽然我不喜欢它的外观,但我已经决定要移除它的外部框架。因此,在添加菜单后,我向JMenuBar添加了最小化、最大化和退出按钮,如下所示: //buttons this.add(Box.createHorizontalGlue()); //turn into images later minimize = new JButton(" - "); maximize = new JButton(" [] "); exit = new JButton(" x ")

我正在开发一个带有下拉菜单的应用程序。虽然我不喜欢它的外观,但我已经决定要移除它的外部框架。因此,在添加菜单后,我向JMenuBar添加了最小化、最大化和退出按钮,如下所示:

//buttons
this.add(Box.createHorizontalGlue());

//turn into images later
minimize = new JButton(" - ");
maximize = new JButton(" [] ");
exit = new JButton(" x ");

this.add(minimize);
this.add(maximize);
this.add(exit);
现在,为了使JMenuBar可拖动,我想在JMenuItems和这些按钮之间添加一个JLabel,但是我不知道如何让它使用所有可用空间。只是这样添加它不起作用:

//draglabel
dragLabel = new JLabel("hey");
dragLabel.setBackground(Color.RED);
dragLabel.setOpaque(true);
this.add(dragLabel);

如何最大化此JLabel以占用JMenuBar内的所有可用空间?

使用JPanel而不是JLabel。默认情况下,它会拉伸以填充所有可用空间。如果您坚持使用Jlabel,则必须对其进行扩展并覆盖getMaximumSize方法,如下所示:

JLabel lblNewLabel = new JLabel("New label") {
// Maximum size should be larger than what the JMenuBar will ever be.
    @Override
    public Dimension getMaximumSize() {
        return new Dimension(Integer.MAX_VALUE, 1000);
    }
};

现在,为了使JMenuBar可拖动,我想在JMenuItems和这些按钮之间添加一个JLabel-为什么需要标签?只需将拖动代码添加到菜单栏本身。查看一个帮助拖动的类。我相信这也会阻止对所有按钮和JMenu下拉菜单的访问。为什么您会这样想?关键是在做出假设之前先尝试一下。红色区域是JPanel,但它似乎并没有一直向右。@BRHSM您可能将HorizontalGlue和JPanel都添加到了JMenuBar中。胶水占据了可用空间的一半,而面板占据了另一半。