package org.gui;import java.awt.Frame;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class TestMenu extends Frame{ /**
 * @param args
 */
MenuBar mb = new MenuBar();
Menu m = new Menu("File");
Menu m1 = new Menu("Start");
MenuItem mi1 = new MenuItem("图片1");
MenuItem mi2 = new MenuItem("图片2");
public TestMenu(){
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
System.exit(0);
}
});
this.setSize(400,400);
mb.add(m);
m.add(m1);
m1.add(mi1);
m1.add(mi2);
MenuListener ml = new MenuListener(this);
mi1.addActionListener(ml);
mi2.addActionListener(ml);
this.setMenuBar(mb);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestMenu();
}}
class MenuListener implements ActionListener{ TestMenu tm = null;
Image im = null;
public MenuListener(TestMenu tm){
this.tm = tm;
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getActionCommand().equals("图片1")){
System.out.println("1111");
im = tm.getToolkit().getImage("d:/001.jsp");
System.out.println(im==null);
while(!tm.getGraphics().drawImage(im, 20, 20, tm)){
tm.getGraphics().drawImage(im, 20, 20, tm);
}
}else if(arg0.getActionCommand().equals("图片2")){
System.out.println("22222");
im = tm.getToolkit().getImage("d:/002.jsp");
System.out.println(im==null);
while(!tm.getGraphics().drawImage(im, 20, 20, tm)){
tm.getGraphics().drawImage(im, 20, 20, tm);
} }
}

}

解决方案 »

  1.   

    最好不要在actionPerformed里面调用tm.getGraphics(),这样不好,更不要用while,会阻塞的。
    应该重载JPanel的paintComponent函数,在里面drawImage。
      

  2.   


    /**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2009</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    import java.awt.Frame;
    import java.awt.Image;
    import java.awt.Menu;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JPanel;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
    import java.io.IOException;
    import javax.swing.JFrame;
    import java.awt.Graphics2D;public class TestMenu extends JFrame{
      public static void main(String[] args) {
          // TODO Auto-generated method stub
          new TestMenu();
        }
        /**
         * @param args
         */
        String filename ;
        MenuBar mb = new MenuBar();
        Menu m = new Menu("File");
        Menu m1 = new Menu("Start");
        MenuItem mi1 = new MenuItem("图片1");
        MenuItem mi2 = new MenuItem("图片2");
        public TestMenu(){
            /*this.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    setVisible(false);
                    System.exit(0);
                }
            });*/
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setSize(400,400);
            this.setContentPane(new PicPanel());
            
            mb.add(m);
            m.add(m1);
            m1.add(mi1);
            m1.add(mi2);
            MenuListener ml = new MenuListener(this);
            mi1.addActionListener(ml);
            mi2.addActionListener(ml);
            this.setMenuBar(mb);
            this.setVisible(true);
        }
        
        public void updateImg(String filename){
          this.filename = filename;
          repaint();
        }
        
        
        
        class PicPanel extends JPanel{
          public void paintComponent(Graphics g){
            if(filename==null || filename.length()==0){
              super.paintComponent(g);
              return;
            }
            try{
              BufferedImage img = ImageIO.read(new File(filename));
              Graphics2D g2d = (Graphics2D)g;
              g2d.drawImage(img,0,0,img.getWidth(),img.getHeight(),null);
            }catch(IOException e){}
          }
        }
    }
    class MenuListener implements ActionListener{    TestMenu tm = null;
        Image im = null;
        public MenuListener(TestMenu tm){
            this.tm = tm;
        }
        public void actionPerformed(ActionEvent arg0) {
            if(arg0.getActionCommand().equals("图片1")){
              tm.updateImg("d:/001.jsp");
            }else if(arg0.getActionCommand().equals("图片2")){
              tm.updateImg("d:/002.jsp");
            }
        }}