当aboutWindow框架打开时,只有标签(-contents) name可见,菜单栏缺失。当标签被注释掉时,条形图会出现,但它会填充整个框架。我遗漏了什么?
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);
};
};发布于 2016-08-24 22:31:32
使用JDialog.setJMenuBar而不是添加JMenuBar
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);发布于 2016-08-24 22:26:26
默认情况下,JDialog使用BorderLayout布局,当您在未指定位置的情况下将零部件添加到此类布局时,这些零部件将被添加到中心(替换之前添加到中心的零部件)。
您的JLabel将替换JMenuBar,因为它是在以后添加的。
你可以这样做:
Main.aboutWindow.add(menubar, BorderLayout.NORTH);或者,正如@ControlAltDel所提到的,使用默认方式将菜单栏添加到对话框:
Main.aboutWindow.setJMenuBar(menubar);https://stackoverflow.com/questions/39125936
复制相似问题