我有一个java程序简单的不能再简单的东西了。还是出错。我看了好长时间了。不知道哪里出问题了。说真的。看了很长的时间了。就这个没有搞定。csdn的高手们能看看不能。先谢了。我现在在设计一个图片浏览器的Java小程序,主要就是模仿windows的图片浏览的功能。 
前面的前个后个图片文件的浏览。放大和缩小。都比较容易。可是后面的水平翻转和左右翻转按钮点击后,没有事件响应。请前辈指点!完整代码如下:IDE:Eclipse import java.awt.*; 
import java.awt.event.*;
import java.io.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;import java.awt.image.*;//
import javax.swing.JOptionPane;//
import java.io.File;
//205217571226yu
public class ImageViewer extends Frame implements ActionListener, FileFilter {
private static JFrame frame=new JFrame("ImageViewer");   
 Panel p,view;
    JButton bt0,bt1,bt2,bt3,bt4;
    Dimension d;
    String img;
    Image im, origin;
    File[] images;
    cs uf = new cs();
    
    Image curImg;//3
    JButton b0, b1, b2, b3, b4;//3
    int command;//3
    
    int imgIndex = 0;
    int funt;
    int funt2=0;
    
    static final int its=0;
    static final int Sma=2;
    
    static final int SHOW_NORM = 0;//3
    static final int SHOW_HORIZONTAL = 1;//3
    static final int SHOW_VERTICAL = 2;// 3   
       
    boolean flag=true;
    int scale = 0;
 
    public ImageViewer(String s) {
        super("ImageViewer");
        img=s;
        
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent evt){
                dispose();
                System.exit(0);
            }
        });
  
        setLayout(new BorderLayout());
        setSize(1200,800);        //command = SHOW_NORM;//3
        
        p = new Panel(); 
        p.add(bt0=new JButton("-20%", new ImageIcon("s1.gif")));
        p.add(bt1=new JButton("Back", new ImageIcon("s2.gif")));
        p.add(bt2=new JButton("File Open", new ImageIcon("s3.gif")));
        p.add(bt3=new JButton("Next", new ImageIcon("s4.gif")));
        p.add(bt4=new JButton("+20%", new ImageIcon("s5.gif")));        p.add(b1 = new JButton("original",new ImageIcon("s6.gif")));//3
        p.add(b2 = new JButton("LeftRight",new ImageIcon("s7.gif")));//3
        p.add(b3 = new JButton("UpDown",new ImageIcon("s8.gif")));//3
        p.add(b4 = new JButton("EXIT",new ImageIcon("s9.gif")));//5
        
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.add(uf);
        
                add(p,BorderLayout.NORTH);
        add(scrollPane,BorderLayout.CENTER);
  
        b1.addActionListener(this);//3
        b2.addActionListener(this);//3
        b3.addActionListener(this);//3
        b4.addActionListener(this);//5
        
        bt0.addActionListener(this);
        bt1.addActionListener(this);
        bt2.addActionListener(this);
        bt3.addActionListener(this);
        bt4.addActionListener(this);
        funt=its;
        setVisible(true);
    }
    
    //3
    public void reDraw(int command) {
       this.command = command;
       repaint();
      }
    
    public void paint(Graphics g) {
     if (curImg == null)
       return;
      d = p.getSize();
      int w = curImg.getWidth(this);
      int h = curImg.getHeight(this);
            
      switch (command) {
      case SHOW_NORM:
       g.drawImage(curImg, 5, d.height + 5, this);
       setSize(curImg.getWidth(this),curImg.getHeight(this));
       setSize(w,h);
       
       break;
      case SHOW_HORIZONTAL:
       g.drawImage(curImg, 0, 0, d.width, d.height+h, w, 0, 0, h,
         this);
       setSize(w,h);
       break;
      case SHOW_VERTICAL:
       g.drawImage(curImg, 0, 0, d.width, d.height+h, w, h, 0, 0,
         this);
       setSize(w,h);
       break;
      }
      }
    //3
    
    public void actionPerformed(ActionEvent evt){
   
        JButton ac = (JButton)evt.getSource();
        String com = evt.getActionCommand();
        //Button b = (Button) evt.getSource();
        //if (evt.getSource() == bt2) { // File Open Button 
            //openImage();
           // return;
         //  } else 
           if(ac.getLabel().equals("original")) {
         command = SHOW_NORM;
     } else if (ac.getLabel().equals("LeftRight")) {
      command = SHOW_HORIZONTAL;
     } else if (ac.getLabel().equals("UpDown")) {
      command = SHOW_VERTICAL;
     }
     reDraw(command);
              
        if(com.equals("-20%")){
         if(scale>-4)
          scale--;
         int h = (int)(origin.getHeight(this)*(1+0.2*scale));
         int w = (int)(origin.getWidth(this)*(1+0.2*scale));
         im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
         flag = false;
        }
        if(com.equals("+20%")){
         scale++;
         int h = (int)(origin.getHeight(this)*(1+0.2*scale));
         int w = (int)(origin.getWidth(this)*(1+0.2*scale));
         im = im.getScaledInstance(w, h, Image.SCALE_DEFAULT);
         flag = false;
        }        
        if(ac.getLabel().equals("File Open")) { 
            FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
            opens.show();
            img = opens.getDirectory() + opens.getFile();          
            images = getAllImageFile(opens.getDirectory());    
            for(int i=0; i<images.length; i++) {
                if(images[i].getPath().equals(img)) {
                    imgIndex = i;
                }
            }
            flag = true;
            scale = 0;
        }
        if(ac.getLabel().equals("Back")){
            if(imgIndex > 0) {
                img = images[--imgIndex].getPath();
            }
            flag = true;
            scale = 0;
        }
  
        if(ac.getLabel().equals("Next")){
            if(imgIndex < images.length-1) {
                img = images[++imgIndex].getPath();
            }
            flag = true;
            scale = 0;
        }      
        setTitle(img);
        uf.repaint();
    }
    
    
    private File[] getAllImageFile(String dir) {      
        return new File(dir).listFiles(this);
    }
   
    public boolean accept(File name) {       
        String[] extension = {"bmp", "jpg", "gif", "jpeg", "png" , "tiff" };          
        for(int i=0; i<extension.length; i++) {
            if(name.getName().endsWith("."  + extension[i])) {
                return true;
            }
        }
        return false;
    }
    
    public static void main(String[] args) {
     ImageViewer Img = new  ImageViewer("");
    }
   
    //5
    /*
    class CopyListener implements java.awt.event.ActionListener{
    public void actionPerformed(ActionEvent e){
JFileChooser saveFile=new JFileChooser();
int result=saveFile.showSaveDialog(frame);
String savePath=saveFile.getSelectedFile().getAbsolutePath();
if(result==JFileChooser.APPROVE_OPTION){
new imgVisible().PicCopy(FileChooser.filePath, savePath);

}else{
}
}
    }
    //5
     */
    
    class cs extends Canvas {
        cs() {}  public void paint(Graphics g) {
     if(flag) {
      im = Toolkit.getDefaultToolkit().getImage(img);
      origin = Toolkit.getDefaultToolkit().getImage(img);
     }
            //d = p.getSize();          
            if(funt == its) {
                g.drawImage(im, 0, 0, this);
            }
        }
  
    }
}这样的一小段代码看了很长时间。请前辈赐教。谢谢。 
有问题就请留在这里。 
Email:  [email protected]不胜感激。

解决方案 »

  1.   

    你这个东西就有点搞笑了..                 你问的东西是什么?  是不能响应 还是不知道自己该怎么响应.?.很明显你没有相应的 左转右转的 事件响应.public void actionPerformed(ActionEvent evt) { JButton ac = (JButton) evt.getSource();
    String com = evt.getActionCommand();
    // Button b = (Button) evt.getSource();
    // if (evt.getSource() == bt2) { // File Open Button
    // openImage();
    // return;
    // } else
    if (ac.getLabel().equals("original")) {
    command = SHOW_NORM;
    } else if (ac.getLabel().equals("LeftRight")) {
    command = SHOW_HORIZONTAL;
    } else if (ac.getLabel().equals("UpDown")) {
    command = SHOW_VERTICAL;
    }
    reDraw(command); if (com.equals("-20%")) {
    if (scale > -4)
    scale--;
    int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
    int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
    im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
    flag = false;
    }
    if (com.equals("+20%")) {
    scale++;
    int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
    int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
    im = im.getScaledInstance(w, h, Image.SCALE_DEFAULT);
    flag = false;
    }
    if (ac.getLabel().equals("File Open")) {
    FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
    opens.show();
    img = opens.getDirectory() + opens.getFile();
    images = getAllImageFile(opens.getDirectory());
    for (int i = 0; i < images.length; i++) {
    if (images[i].getPath().equals(img)) {
    imgIndex = i;
    }
    }
    flag = true;
    scale = 0;
    }
    if (ac.getLabel().equals("Back")) {
    if (imgIndex > 0) {
    img = images[--imgIndex].getPath();
    }
    flag = true;
    scale = 0;
    } if (ac.getLabel().equals("Next")) {
    if (imgIndex < images.length - 1) {
    img = images[++imgIndex].getPath();
    }
    flag = true;
    scale = 0;
    }
    setTitle(img);
    uf.repaint();
    } 很明显你的事件响应最终只到 Next上.. 你自己都没写事件相应的方法. 你还在这问 为什么不响应..真是怀疑这代码是不是你写的. 
    好 . 那就推论到你不知道该怎么写.     左右转我想到的办法是 把每一个点的像素值拿到..做矩阵变换.  可能比较笨...不排除有更好的..
      

  2.   

    我是楼主:2楼说没有响应事件。怎么没有;下面就是:d = p.getSize();
             int w = curImg.getWidth(this);
             int h = curImg.getHeight(this);
                      
             switch (command) {
             case SHOW_NORM:
              g.drawImage(curImg, 5, d.height + 5, this);
              setSize(curImg.getWidth(this),curImg.getHeight(this));
              setSize(w,h);
              
              break;
             case SHOW_HORIZONTAL:
              g.drawImage(curImg, 0, 0, d.width, d.height+h, w, 0, 0, h,
                this);
              setSize(w,h);
              break;
             case SHOW_VERTICAL:
              g.drawImage(curImg, 0, 0, d.width, d.height+h, w, h, 0, 0,
                this);
              setSize(w,h);
              break;
    主要是 
    JButton ac = (JButton)evt.getSource();
    引用有问题。
    可能的问题在这里。
      

  3.   

    被的混乱就不说了,这说下面这句:    public void paint(Graphics g) {
            if (curImg == null)
              return;在paint方面里面,第一句就是判断curImg是否为空
    可是你把整个代码看看,哪里给curImg赋过值?
    这个方法始终被调用,但始终在第1句就返回了。后面的懒得看了,这些代码如果是楼主抄的,我建议楼主还是把它丢到垃圾桶去好了。
      

  4.   


    package csdn.graphics;import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.AffineTransform;
    import java.io.*;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;import java.awt.image.*;//
    import java.io.File;//205217571226yu
    public class ImageViewer extends Frame implements ActionListener {
    private static JFrame frame = new JFrame("ImageViewer");
    Panel p, view;
    JButton bt0, bt1, bt2, bt3, bt4;
    Dimension d;
    String img;
    Image im, origin;
    File[] images;
    cs uf = new cs(); Image curImg;// 3
    JButton b0, b1, b2, b3, b4;// 3
    int command;// 3 int imgIndex = 0;
    int funt;
    int funt2 = 0; static final int its = 0;
    static final int Sma = 2; static final int SHOW_NORM = 0;// 3
    static final int SHOW_HORIZONTAL = 1;// 3
    static final int SHOW_VERTICAL = 2;// 3 boolean flag = true;
    int scale = 0; public ImageViewer(String s) {
    super("ImageViewer");
    img = s; addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) {
    dispose();
    System.exit(0);
    }
    }); setLayout(new BorderLayout());
    setSize(1200, 800); // command = SHOW_NORM;//3 p = new Panel();
    p.add(bt0 = new JButton("-20%", new ImageIcon("s1.gif")));
    p.add(bt1 = new JButton("Back", new ImageIcon("s2.gif")));
    p.add(bt2 = new JButton("File Open", new ImageIcon("s3.gif")));
    p.add(bt3 = new JButton("Next", new ImageIcon("s4.gif")));
    p.add(bt4 = new JButton("+20%", new ImageIcon("s5.gif"))); p.add(b1 = new JButton("original", new ImageIcon("s6.gif")));// 3
    p.add(b2 = new JButton("LeftRight", new ImageIcon("s7.gif")));// 3
    p.add(b3 = new JButton("UpDown", new ImageIcon("s8.gif")));// 3
    p.add(b4 = new JButton("EXIT", new ImageIcon("s9.gif")));// 5 ScrollPane scrollPane = new ScrollPane();
    scrollPane.add(uf); add(p, BorderLayout.NORTH);
    add(scrollPane, BorderLayout.CENTER); b1.addActionListener(this);// 3
    b2.addActionListener(this);// 3
    b3.addActionListener(this);// 3
    b4.addActionListener(this);// 5 bt0.addActionListener(this);
    bt1.addActionListener(this);
    bt2.addActionListener(this);
    bt3.addActionListener(this);
    bt4.addActionListener(this); d = p.getSize();
    funt = its;
    setVisible(true);
    } private void zoomOut() {
    if (scale > -4) {
    scale--;
    int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
    int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
    im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
    uf.repaint();
    }
    } private void zoomIn() {
    if (scale < 4) {
    scale++;
    int h = (int) (origin.getHeight(this) * (1 + 0.2 * scale));
    int w = (int) (origin.getWidth(this) * (1 + 0.2 * scale));
    im = origin.getScaledInstance(w, h, Image.SCALE_DEFAULT);
    uf.repaint();
    }
    } private void openPic() {
    origin = Toolkit.getDefaultToolkit().getImage(img);
    im = Toolkit.getDefaultToolkit().getImage(img);
    setTitle(img);
    scale = 0;
    uf.repaint();
    } private void fileOpen() {
    FileDialog opens = new FileDialog(this, "open", FileDialog.LOAD);
    opens.setVisible(true);
    img = opens.getDirectory() + opens.getFile();
    if (img == null)
    return;
    File file = new File(img);
    if (!file.isFile())
    return; images = getAllImageFile(opens.getDirectory());
    imgIndex = -1;
    for (int i = 0; i < images.length; i++) {
    if (images[i].getPath().equals(img)) {
    imgIndex = i;
    }
    }
    if (imgIndex < 0)
    return; openPic();
    } private void previous() {
    if (imgIndex > 0) {
    img = images[--imgIndex].getPath();
    openPic();
    }
    } private void next() {
    if (imgIndex < images.length - 1) {
    img = images[++imgIndex].getPath();
    openPic();
    }
    } private void original() {
    if (img != null) {
    openPic();
    }
    } private void leftRight() {
    Graphics g=uf.getGraphics();
    Graphics2D g2d=(Graphics2D)g;
    g2d.clearRect(0, 0, uf.getWidth(), uf.getHeight());
            AffineTransform origXform = g2d.getTransform();
            AffineTransform newXform = (AffineTransform) (origXform.clone());
            int yRot = im.getHeight(uf);
            int xRot = im.getWidth(uf);
            newXform.rotate(Math.toRadians(90), xRot, yRot);
            //inc+=10;
            g2d.setTransform(newXform);
            int x = (im.getWidth(uf));
            int y = (im.getHeight(uf));
            g2d.drawImage(im, y, x, uf);
            //inc2+=10;
            g2d.setTransform(origXform);
        } private void upDown() {
    Graphics g=uf.getGraphics();
    Graphics2D g2d=(Graphics2D)g;
    g2d.clearRect(0, 0, uf.getWidth(), uf.getHeight());
            AffineTransform origXform = g2d.getTransform();
            AffineTransform newXform = (AffineTransform) (origXform.clone());
            int yRot = im.getHeight(uf);
            int xRot = im.getWidth(uf);
            newXform.rotate(Math.toRadians(-90), xRot, yRot);
            //inc+=10;
            g2d.setTransform(newXform);
            int x = (im.getWidth(uf));
            int y = (im.getHeight(uf));
            g2d.drawImage(im, y, x, uf);
            //inc2+=10;
            g2d.setTransform(origXform);
    } public void actionPerformed(ActionEvent evt) {
    JButton ac = (JButton) evt.getSource();
    // get command string
    String com = evt.getActionCommand(); if (com.equals("-20%")) {
    zoomOut();
    } else if (com.equals("+20%")) {
    zoomIn();
    } else if (com.equals("File Open")) {
    fileOpen();
    } else if (com.equals("Back")) {
    previous();
    } else if (com.equals("Next")) {
    next();
    } else if (com.equals("original")) {
    original();
    } else if (com.equals("LeftRight")) {
    leftRight();
    } else if (com.equals("UpDown")) {
    upDown();
    }
    } private File[] getAllImageFile(String dir) {
    return new File(dir).listFiles(new FileFilter() {
    public boolean accept(File name) {
    String[] extension = { "bmp", "jpg", "gif", "jpeg", "png",
    "tiff" };
    for (int i = 0; i < extension.length; i++) {
    if (name.getName().endsWith("." + extension[i])) {
    return true;
    }
    }
    return false;
    }
    });
    } public static void main(String[] args) {
    ImageViewer Img = new ImageViewer("");
    }
    class cs extends Canvas {
    cs() {
    } public void paint(Graphics g) {
    g.drawImage(im, 0, 0, this);
    } }
    }