嗨,我刚刚写了一个使用菜单栏的Swing代码。但问题出现在运行过程中。我输入:
javac Menu.java
java Menu它未显示错误,但GUI不显示。下面是我的源码以供参考:
import javax.swing.*;
class Menu extends JFrame
{
JMenuBar mb;
JMenu m1,m2,m3;
JMenuItem mn1,mn2,mn3;
JCheckBoxMenuItem chk1,chk2,chk3;
JRadioButtonMenuItem rd1,rd2,rd3;
JSeparator sp1,sp2,sp3;
Menu()
{
setTitle("MenuBar Demo");
mb = new JMenuBar();
m1 = new JMenu("File");
m2 = new JMenu("Edit");
m3 = new JMenu("View");
mn1 = new JMenuItem("New");
mn2 = new JMenuItem("Open");
mn3 = new JMenuItem("Close");
chk1 = new JCheckBoxMenuItem("Cut");
chk2 = new JCheckBoxMenuItem("Copy");
chk3 = new JCheckBoxMenuItem("Paste");
rd1 = new JRadioButtonMenuItem("Find");
rd2 = new JRadioButtonMenuItem("Find Next");
rd3 = new JRadioButtonMenuItem("Replace");
sp1 = new JSeparator();
sp2 = new JSeparator();
sp3 = new JSeparator();
m1.add(mn1);
m1.add(mn2);
m1.add(sp1);
m1.add(mn3);
m2.add(chk1);
m2.add(chk2);
m2.add(sp2);
m2.add(chk3);
m3.add(rd1);
m3.add(rd2);
m3.add(sp3);
m3.add(rd3);
mb.add(m1);
mb.add(m1);
mb.add(m2);
mb.add(m3);
getContentPane().add(mb);
mb.setSize(300, 300);
mb.setVisible(true);
}
public static void main(String[] args)
{
new Menu();
}
}为什么GUI没有出现?
发布于 2012-06-23 19:05:26
在构造函数的末尾,调用this.setVisible(true);
一般提示
setVisible(true),而是将它们添加到将使其可见的容器中。菜单栏似乎没有添加到任何内容中。使用setJMenuBar(JMenuBar)这些更改将在屏幕上生成一个小GUI。
// ...
//getContentPane().add(mb);
setJMenuBar(mb);
//mb.setSize(300, 300);
//mb.setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
setVisible(true);发布于 2012-06-23 19:06:45
使用像这样的东西:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Menu app = new Menu();
app.setVisible(true);
}
});}
我建议重命名您的类,因为这是一个应用程序/框架,而不是菜单。
发布于 2012-06-23 19:04:21
缺省情况下,JFrame可见性为false
您忘记显示frame this.setVisible(true);
所以构造函数add的结尾
mb.setSize(300, 300);
mb.setVisible(true);
this.setVisible(true);<<<Add here代码:
import javax.swing.*;
class Menu extends JFrame {
JMenuBar mb;
JMenu m1, m2, m3;
JMenuItem mn1, mn2, mn3;
JCheckBoxMenuItem chk1, chk2, chk3;
JRadioButtonMenuItem rd1, rd2, rd3;
JSeparator sp1, sp2, sp3;
Menu() {
setTitle("MenuBar Demo");
mb = new JMenuBar();
m1 = new JMenu("File");
m2 = new JMenu("Edit");
m3 = new JMenu("View");
mn1 = new JMenuItem("New");
mn2 = new JMenuItem("Open");
mn3 = new JMenuItem("Close");
chk1 = new JCheckBoxMenuItem("Cut");
chk2 = new JCheckBoxMenuItem("Copy");
chk3 = new JCheckBoxMenuItem("Paste");
rd1 = new JRadioButtonMenuItem("Find");
rd2 = new JRadioButtonMenuItem("Find Next");
rd3 = new JRadioButtonMenuItem("Replace");
sp1 = new JSeparator();
sp2 = new JSeparator();
sp3 = new JSeparator();
m1.add(mn1);
m1.add(mn2);
m1.add(sp1);
m1.add(mn3);
m2.add(chk1);
m2.add(chk2);
m2.add(sp2);
m2.add(chk3);
m3.add(rd1);
m3.add(rd2);
m3.add(sp3);
m3.add(rd3);
mb.add(m1);
mb.add(m1);
mb.add(m2);
mb.add(m3);
getContentPane().add(mb);
mb.setSize(300, 300);
mb.setVisible(true);
this.setVisible(true);
}
public static void main(String[] args) {
new Menu();
}
}https://stackoverflow.com/questions/11168949
复制相似问题