首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JLabel覆盖JMenuBar

JLabel覆盖JMenuBar
EN

Stack Overflow用户
提问于 2016-08-24 22:20:55
回答 2查看 187关注 0票数 1

aboutWindow框架打开时,只有标签(-contents) name可见,菜单栏缺失。当标签被注释掉时,条形图会出现,但它会填充整个框架。我遗漏了什么?

代码语言:javascript
复制
import javax.swing.*;
import java.net.*;
import java.awt.event.*;

public class Main
{

    public static JDialog aboutWindow;

    public static void about () {
    //JDialog aboutWindow = new JDialog();
    Main.aboutWindow = new JDialog();
    Main.aboutWindow.setTitle("About kingfisher a0.0.3");
    Main.aboutWindow.setSize(300,600);
    Main.aboutWindow.setModal(true);
        JMenuBar menubar = new JMenuBar();
            JMenu control = new JMenu("Control");
                JMenuItem quit = new JMenuItem("quit");
                    quit.addActionListener(new ActionListene121r() {
                        public void actionPerformed(ActionEvent event) {
                            Main.aboutWindow.setVisible(false);
                            }
                        }
                    );
                control.add(quit);
            menubar.add(control);
        Main.aboutWindow.add(menubar);
    JLabel name = new JLabel("kingfisher");
    Main.aboutWindow.add(name);
    Main.aboutWindow.setVisible(false);
    }


    public static void main (String args[]){
    //Defined window dimensions
    JFrame controlpanel = new JFrame();
    controlpanel.setTitle("kingfisher Control Panel");
    controlpanel.setSize(500,400);
    controlpanel.add(new JLabel("The angels have the blue box"));
        JMenuBar menubar = new JMenuBar();
        //defining menu groups
            JMenu windows = new JMenu("Windows");
                JCheckBoxMenuItem chat = new JCheckBoxMenuItem("Chat");
                JCheckBoxMenuItem filetransfer = new JCheckBoxMenuItem("Filetransfer");
                JCheckBoxMenuItem settings = new JCheckBoxMenuItem("Settings");
                windows.add(chat);
                windows.add(filetransfer);
                windows.add(settings);
            JMenu control = new JMenu("Control");
                JMenuItem quit = new JMenuItem("Quit");
                quit.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent event) {
                        System.exit(0);
                        }
                    }
                );
                control.add(quit);
            JMenu help = new JMenu("Help");
                JMenuItem support = new JMenuItem("Support");
                JMenuItem about = new JMenuItem("About");
                    about.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent event) {
                            Main.aboutWindow.setVisible(true);
                            }
                        }
                    );
                help.add(support);
                help.add(about);
            menubar.add(control);
            menubar.add(windows);
            menubar.add(help);
        controlpanel.setJMenuBar(menubar);
    controlpanel.setVisible(true);
    };
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 22:31:32

使用JDialog.setJMenuBar而不是添加JMenuBar

代码语言:javascript
复制
Main.aboutWindow = new JDialog();
    Main.aboutWindow.setTitle("About kingfisher a0.0.3");
    Main.aboutWindow.setSize(300,600);
    Main.aboutWindow.setModal(true);
        JMenuBar menubar = new JMenuBar();
            JMenu control = new JMenu("Control");
                JMenuItem quit = new JMenuItem("quit");
                    quit.addActionListener(new ActionListene121r() {
                        public void actionPerformed(ActionEvent event) {
                            Main.aboutWindow.setVisible(false);
                            }
                        }
                    );
                control.add(quit);
            menubar.add(control);

        Main.aboutWindow.setJMenuBar(menubar); //changed

    JLabel name = new JLabel("kingfisher");
    Main.aboutWindow.add(name);
    Main.aboutWindow.setVisible(false);
票数 3
EN

Stack Overflow用户

发布于 2016-08-24 22:26:26

默认情况下,JDialog使用BorderLayout布局,当您在未指定位置的情况下将零部件添加到此类布局时,这些零部件将被添加到中心(替换之前添加到中心的零部件)。

您的JLabel将替换JMenuBar,因为它是在以后添加的。

你可以这样做:

代码语言:javascript
复制
Main.aboutWindow.add(menubar, BorderLayout.NORTH);

或者,正如@ControlAltDel所提到的,使用默认方式将菜单栏添加到对话框:

代码语言:javascript
复制
Main.aboutWindow.setJMenuBar(menubar);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39125936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档