回 帖 发 新 帖 刷新版面

主题:[讨论]一个关于Swing菜单中显示图标的问题

这个是我的代码: 
代码可能有点长,但是思路简单。关键就是菜单中无法显示出图标来,无法显示1.gif这个图象来。 
可能这里不怎么好看,我在别的地方写了好了用JAVA代码编辑器写好了,地址:
[url=http://www.chinajavaworld.com/thread.jspa?threadID=747071&tstart=0]http://www.chinajavaworld.com/thread.jspa?threadID=747071&tstart=0[/url]
package jmenu;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MenuMain{
    public static void main(String[]args){
        MenuFrame frame=new MenuFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }
}
class MenuFrame extends JFrame{
    private Action saveaction,saveasaction;
    private JCheckBoxMenuItem readonly;
    private JPopupMenu pop;
    public MenuFrame(){
        this.setTitle("Jmenu Test");
        this.setSize(400,400);
        
        JMenu filemenu=new JMenu("File");
        JMenuItem newitem=filemenu.add(new TestAction("New"));
        
        JMenuItem openitem=filemenu.add(new TestAction("Open"));
        openitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
        filemenu.addSeparator();
        
        saveaction=new TestAction("Save");
        JMenuItem saveitem=filemenu.add(saveaction);
        saveitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_DOWN_MASK));
        
        saveasaction=new TestAction("Save as");
        filemenu.add(saveasaction);
        filemenu.addSeparator();
        
        filemenu.add(new 
                AbstractAction("Exit"){
                    public void actionPerformed(ActionEvent e){
                        System.exit(0);
                    }
        }
        );
        
        readonly=new JCheckBoxMenuItem("Read-only");
        readonly.addActionListener(new
                ActionListener(){
                    public void actionPerformed(ActionEvent e){
                        boolean saveok=! readonly.isSelected();
                        saveaction.setEnabled(saveok);
                        saveasaction.setEnabled(saveok);
                    }
                }
        );
        
        ButtonGroup buttongroup=new ButtonGroup();        
        JRadioButtonMenuItem inserttiem=new JRadioButtonMenuItem("Insert",true);
        JRadioButtonMenuItem overtypeitem=new JRadioButtonMenuItem("overtype",false);
        buttongroup.add(inserttiem);
        buttongroup.add(overtypeitem);
        
        
        Action cutaction=new TestAction("Cut");
        cutaction.putValue(Action.SMALL_ICON,new ImageIcon("1.gif"));//本来这个1.gif就要显示在菜单中啊。
        Action copyaction=new TestAction("Copy");
        copyaction.putValue(Action.SMALL_ICON,new ImageIcon("1.gif"));
        
        JMenu editmenu=new JMenu("Edit");
        editmenu.add(cutaction);
        editmenu.add(copyaction);
        editmenu.addSeparator();
        
        JMenu optionmenu=new JMenu("Option");
        optionmenu.add(readonly);
        optionmenu.add(inserttiem);
        optionmenu.add(overtypeitem);
        
        filemenu.add(optionmenu);
        
        JMenuBar menubar=new JMenuBar();
        menubar.add(filemenu);
        this.setJMenuBar(menubar);
        
        //popup menu
        pop=new JPopupMenu();
        pop.add(cutaction);
        pop.add(copyaction);
        
        this.getContentPane().addMouseListener(new
                MouseAdapter()
                {
                    public void mousePressed(MouseEvent e){
                        
                        //if(e.isPopupTrigger()){
                            int i=e.getButton();
                            if(i==3){
                                pop.show(e.getComponent(),e.getX(),e.getY());
                                
                            }
                        //}
                    }
                    public void mouseReleaseed(MouseEvent e){                        
                        //if(e.isPopupTrigger())
                            //pop.show(e.getComponent(),e.getX(),e.getY());
                    }
                });
        
    }
}
class TestAction extends AbstractAction{
    public TestAction(String title){
        super(title);
    }
    public void actionPerformed(ActionEvent e){
        System.out.println(this.getValue(Action.NAME)+"is selected");
    }
}


还有个问题就是怎么控制弹出式的菜单,大家看到了用了个MouseEvent.getButton() 
得到他是哪个鼠标按键来显示,但是按SDK中的方法,和其他的资料上有个 
public void mouseReleaseed(MouseEvent e){ 
if(e.isPopupTrigger()) pop.show(e.getComponent(),e.getX(),e.getY()); 

大家看到我的源程序注释了这个语句。 
用上面的e.getButton()去判断,,来实现,, 
请问有更好的方法么,参考<<JAVA核心技术I>>资料上说的用e.isPopupTriger()方法来做,? 
请指教 

回复列表 (共5个回复)

沙发

加上包名试试
cutaction.putValue(Action.SMALL_ICON,new ImageIcon("jmenu/1.gif"));

板凳

楼上的朋友 看你的思维很活跃  我也真想向你那样 就好了   有什么好的学习经验可以告诉我么;我就是有点笨,希望你不要嫌我麻烦  我的邮箱是
xuhongliang999@163.com    QQ:83957595

3 楼

Download a menudemo from Sun, learn from it!


[url]http://java.sun.com/docs/books/tutorial/uiswing/examples/components/index.html[/url]

4 楼


我的1.gif放在了.class文件夹下,即包Jmenu下。我也在我的.java文件夹下也放了个1.gif,但是多不可以显示(在eclipse下调试)

谢楼上的,我刚刚又调试了下,
我直接用SUM提供的SDK进DOS下去调试,把1.gif放在.java源文件下,实现了,,不过我用eclipse做的时候去不可以,
不知道是不是要进行eclipse工具方面的配置还是怎么搞。。
有经验的高手,请继续指教,eclipse这样IDE方便可是就是有点复杂,加上还是洋文版本的,真的有点吃力。
呵呵

5 楼

[quote]楼上的朋友 看你的思维很活跃  我也真想向你那样 就好了   有什么好的学习经验可以告诉我么;我就是有点笨,希望你不要嫌我麻烦  我的邮箱是
xuhongliang999@163.com    QQ:83957595[/quote]


嘿嘿,其实我是从C/C++过来的对编程小有基础,我看来编程其实就是思想的东西,是个编程思路,掌握了这门语言的思路,其实我发现多是个套路了,
特别是SWING  和AWT程序,
我看的JAVA核心技术  这书,,他的变成风格与其他的书有点不同
经验没什么。

我来回复

您尚未登录,请登录后再回复。点此登录或注册