java关于菜单栏和右键菜单的添加问题

我想实现菜单栏文件,编辑两个菜单,还有一个右键菜单,但是注意下面的代码,我添加了注释掉的菜单下面的几行代码,为什麽会出现点击右键的时候只剩下一行自动换行了呢?而且菜单栏都... 我想实现菜单栏文件,编辑两个菜单,还有一个右键菜单,但是注意下面的代码,我添加了注释掉的菜单下面的几行代码,为什麽会出现点击右键的时候只剩下一行自动换行了呢?而且菜单栏都没显示出来求答疑解惑
import java.awt.TextArea;
import java.awt.Frame;
import java.awt.*;
import java.awt.event.*;
public class PopupMenuTest
{
//创建文本域
private final TextArea ta = new TextArea(4,30);
private MenuBar mb = new MenuBar();
//创建主窗口
private final Frame f = new Frame("测试");

//创建右键菜单
PopupMenu pop = new PopupMenu();

//创建菜单项组件
CheckboxMenuItem autoWrap = new CheckboxMenuItem("自动换行");
MenuItem copyItem = new MenuItem("复制");
MenuItem pasteItem = new MenuItem("粘贴");
Menu format = new Menu("格式");
MenuItem commentItem = new MenuItem("注释");
MenuItem cancelItem = new MenuItem("取消注释");
Menu file = new Menu();
Menu edit = new Menu();
MenuItem newItem = new MenuItem();
MenuItem saveItem = new MenuItem();

public void init()
{
ActionListener menuListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String cmd = e.getActionCommand();
ta.append("单机了" + cmd +"菜单" + "\n");
if(cmd.equals("退出"))
{
System.exit(0);
}
}

};
//为commentItem,cancelItem注册事件监听器
commentItem.addActionListener(menuListener);
cancelItem.addActionListener(menuListener);
pop.add(autoWrap);
pop.add(copyItem);
pop.add(pasteItem);
format.add(commentItem);
format.add(cancelItem);
pop.add(format);
//菜单栏
/*
file.add(newItem);
file.add(saveItem);
edit.add(copyItem);
edit.add(pasteItem);
edit.add(format);
//讲edit ,file添加到菜单中
mb.add(file);
mb.add(edit);
f.setMenuBar(mb);
*/
final Panel p =new Panel();
p.setPreferredSize(new Dimension(300,160));
p.add(pop);

//添加鼠标监听器
p.addMouseListener( new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
//如果释放的是鼠标右键
if(e.isPopupTrigger())
{
pop.show(p,e.getX(),e.getY());
//输出事件源组件的坐标
System.out.println("e.getX = "+ e.getX());
System.out.println("e.getY = "+ e.getY());
}
}

}
);
f.add(p);
f.add(ta,BorderLayout.NORTH);

f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
f.pack();
f.setVisible(true);
}
public static void main(String[] args)
{
new PopupMenuTest().init();
}
}
展开
 我来答
stwwxjs
2013-05-05 · TA获得超过593个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:199万
展开全部

(|||¬ω¬)菜单栏不是没有显示,你没给它命名,所以显示的都是空白,点它还是有反应的...

这是第一个问题...

Menu file = new Menu("文件");
Menu edit = new Menu("编辑");
MenuItem newItem = new MenuItem("新建");
MenuItem saveItem = new MenuItem("保存");

还有第二个问题,就是pop添加菜单项的那几行代码放错位置了,放到事件响应里就好了...

//为commentItem,cancelItem注册事件监听器
        commentItem.addActionListener(menuListener);
        cancelItem.addActionListener(menuListener);
                                                              
        //菜单栏
        file.add(newItem);
        file.add(saveItem);
        edit.add(copyItem);
        edit.add(pasteItem);
        format.add(commentItem);
        format.add(cancelItem);
        edit.add(format);
        //讲edit ,file添加到菜单中
        mb.add(file);
        mb.add(edit);
        f.setMenuBar(mb);
p.addMouseListener( new MouseAdapter()
        {
            public void mouseReleased(MouseEvent e)
            {
//如果释放的是鼠标右键
                if(e.isPopupTrigger())
                {
                    pop.add(autoWrap);
                    pop.add(copyItem);
                    pop.add(pasteItem);
                    pop.add(format);
                    pop.show(p,e.getX(),e.getY());
//输出事件源组件的坐标
                    System.out.println("e.getX = "+ e.getX());
                    System.out.println("e.getY = "+ e.getY());
                }
            }
                                                              
        });

你修改下试试,有问题可以继续追问,望采纳哈~

追问
后来在API里面找到问题啦,据说是这样子的PopMenu 的add方法
add
publicMenuItem add(MenuItem mi)
将指定的菜单项添加到此菜单。如果该菜单项为另一个菜单的一部分,则从该菜单移除它。

参数:
mi - 要添加的菜单项
返回:
已添加的菜单项
前面的一个问题你回答对了,后还有个问题面是有重复的菜单添加
追答
额,那问题我倒是没发现过,只是我使用的时候都是在右击事件响应时才在pop中添加menuitem的,运行也都是正常的,所以也就没出现过你那样的问题...
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式