import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
public class frame extends JFrame implements ActionListener
{
 public frame()
 {
 setSize(400,400);
 setVisible(true);
 JMenuBar mbar =new JMenuBar();
 setJMenuBar(mbar);
 JMenu m1 =  new  JMenu("file");
 mbar.add(m1);
 JMenuItem OpenItem=new JMenuItem("open");
 m1.add(OpenItem);
 OpenItem.addActionListener(this);
 JMenuItem ExitItem =new JMenuItem("exit");
 m1.add(ExitItem);
 ExitItem.addActionListener(this);
 JLabel label =new JLabel();
 Container content=getContentPane();
 content.add(label,JLabel.CENTER);
 }
 
 public void actionPerformed(ActionEvent evt)
 {
  Object source =evt.getSource();
  if(source==OpenItem)
  {JFileChooser chooser = new JFileChooser();
  chooser.setCurrentDirectory(new File("d:/"));
  chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
                        {public boolean accept(File f)
                         {
                           return f.getName().toLowerCase().endsWith(".gif");
                          }
                          public String getDescription()
                         {return "Gif picture";}
                         });
  int result =chooser.showOpenDialog(this);
  if(result==JFileChooser.APPROVE_OPTION)
   { String name=chooser.getSelectedFile().getName();
     label.setIcon(new ImageIcon(name));
    }
  }
  else if(source==ExitItem)  System.exit(0);
 }
public static void main(String args[])
 {
  new frame(); 
 }      
}我在电脑中运行后显示:
D:\>javac frame.java
frame.java:30: cannot find symbol
symbol  : variable OpenItem
location: class frame
  if(source==OpenItem)
             ^
frame.java:44: cannot find symbol
symbol  : variable label
location: class frame
     label.setIcon(new ImageIcon(name));
     ^
frame.java:47: cannot find symbol
symbol  : variable ExitItem
location: class frame
  else if(source==ExitItem)  System.exit(0);
                  ^
3 errors
我看了半天也没发现问题到底错在那?

解决方案 »

  1.   

    OpenItem 你这个是frame构造方法里定义的,在actionPerformed()里看不到,你应该把这个OpenItem 定义全局的.
    package zhao;import java.util.*;
    import javax.swing.*; 
    import java.awt.event.*; 
    import java.awt.*; 
    import java.io.*; 
    public class frame extends JFrame implements ActionListener 

    JMenuItem OpenItem=null;
    JLabel label = null;
     JMenuItem ExitItem = null;
     public frame() 
     { 
     setSize(400,400); 
     setVisible(true); 
     JMenuBar mbar =new JMenuBar(); 
     setJMenuBar(mbar); 
     JMenu m1 =  new  JMenu("file"); 
     mbar.add(m1); 
      OpenItem=new JMenuItem("open"); 
     m1.add(OpenItem); 
     OpenItem.addActionListener(this); 
      ExitItem =new JMenuItem("exit"); 
     m1.add(ExitItem); 
     ExitItem.addActionListener(this); 
     JLabel label =new JLabel(); 
     Container content=getContentPane(); 
     content.add(label,JLabel.CENTER); 
     } 
      
     public void actionPerformed(ActionEvent evt) 
     { 
      Object source =evt.getSource(); 
      if(source==OpenItem) 
      {JFileChooser chooser = new JFileChooser(); 
      chooser.setCurrentDirectory(new File("d:/")); 
      chooser.setFileFilter(new javax.swing.filechooser.FileFilter() 
                            {public boolean accept(File f) 
                             { 
                               return f.getName().toLowerCase().endsWith(".gif"); 
                              } 
                              public String getDescription() 
                             {return "Gif picture";} 
                             }); 
      int result =chooser.showOpenDialog(this); 
      if(result==JFileChooser.APPROVE_OPTION) 
       { String name=chooser.getSelectedFile().getName(); 
         label.setIcon(new ImageIcon(name)); 
        } 
      } 
      else if(source==ExitItem)  System.exit(0); 
     } 
    public static void main(String args[]) 
     { 
      new frame();  
     }       
    }没仔细看代码,反正就是变量的范围问题了
      

  2.   

    private static final long serialVersionUID = 1L;
    JMenuItem OpenItem;
    JMenuItem ExitItem;
    JLabel label ;在构造方法前面加上上面几行代码,在构造方法里去掉对变量的声明。因为你在actionPerformed方法中引用了未声明的变量。注意变量的作用域。你在actionPerformed方法中使用的变量超过了变量的作用域
      

  3.   

    作用域的问题。public class frame extends JFrame implements ActionListener {
    JMenuItem OpenItem;
    JLabel label;
    JMenuItem ExitItem;


    public frame() {
      

  4.   

    用建议evt.getCommand.eqauls("button显示的值")做判断
      

  5.   

    是变量错误~!
    JMenuItem OpenItem=new JMenuItem("open"); JMenuItem ExitItem =new JMenuItem("exit"); JLabel label =new JLabel(); 把这三句放到构造函数的上面应该就ok了~!