我似乎做的每件事都是正确的。我只需要实现一个简单的JMenuBar,但它似乎不起作用。有没有人能帮帮我?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class swing {
public static void main (String[] args) {
JFrame frame = new JFrame ("menu");
frame.setVisible (true);
frame.setSize (400, 400);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JMenuBar bar = new JMenuBar ();
frame.setJMenuBar (bar);
bar.setVisible (true);
JMenu file = new JMenu ("File");
bar.add (file);
JMenuItem open = new JMenuItem ("open");
file.add(open);
}
}发布于 2012-06-12 14:23:50
你要做的就是先显示框架,然后再添加菜单栏。这是行不通的。你应该做反向操作。在末尾或至少在设置菜单栏之后移动frame.setVisible (true);行。您应该始终在添加所有组件之后显示frame,否则在显示frame之后添加的组件直到repaint()完成后才会出现。
来自@sjr的评论:
有时在容器显示后更改容器(添加/删除组件/调整组件大小)时需要
revalidate(不仅仅是repaint)。
发布于 2012-06-12 14:44:48
试试这个,很管用。
向框架添加组件在其invisible state中进行,一旦设置了所有组件,则使其可见。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class swing extends JFrame {
public swing(){
this.setSize(400,400);
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
this.setComponent();
}
public void setComponent(){
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("Menu");
this.setJMenuBar(bar);
bar.add(menu);
}
public static void main (String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
swing s = new swing();
s.setVisible(true);
}
});
}
}https://stackoverflow.com/questions/10991414
复制相似问题