2011-07-29 112 views
-1

我想通过2个按钮移动我的图片,我的问题是与另一个按钮的听众,, 我怎样才能使它正常工作?通过按钮移动图像

这是代码和图片>>

http://imageshack.us/photo/my-images/204/sw1e.png 
http://imageshack.us/photo/my-images/200/sw2ni.png/ 

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import javax.imageio.*; 
import java.io.*; 

public class Transformation2D extends JFrame implements ActionListener { 

    private static final long serialVersionUID = 1L; 
    private MyDrawingPanel drawingPanel = new MyDrawingPanel(); 
    private MyDrawingPanel2 drawingPanel2 = new MyDrawingPanel2(); 
    private JButton goLeft = new JButton("<--"); 
    private JButton goRight = new JButton("-->"); 
    private int previousX; 
    private int previousY; 
    private Image stick1; 
    private Image stick2; 
    private boolean movementFlag = false; 

    public Transformation2D() { 
     super("Walking Stickfigure"); 
     setSize(600, 200); 
     previousX = 250; 
     previousY = 0; 
     setBackground(Color.WHITE); 
     setLayout(new BorderLayout()); 
     add(drawingPanel, BorderLayout.CENTER); 
     add(drawingPanel2, BorderLayout.SOUTH); 
     drawingPanel2.add(goLeft); 
     drawingPanel2.add(goRight); 
     stick1 = null; 
     stick2 = null; 
     try { 
      stick1 = ImageIO.read(new File("sw1.png")); 
      stick2 = ImageIO.read(new File("sw2.png")); 
     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); 
      System.exit(0); 
     } 
     goLeft.addActionListener(this); 
     goRight.addActionListener(this); 
     setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     if (ae.getSource() == goLeft) { 
      drawingPanel.repaint(); 
     } else if (ae.getSource() == goRight) { 
      drawingPanel2.repaint(); 
     } 
    } 

    public static void main(String[] args) { 
     Transformation2D transformation2D = new Transformation2D(); 
    } 

    class MyDrawingPanel extends JPanel { 

     private static final long serialVersionUID = 1L; 

     public MyDrawingPanel() { 
      setBackground(Color.WHITE); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      g.clearRect(previousX, previousY, stick1.getWidth(this), stick1.getHeight(this)); 
      g.drawLine(0, 134, 600, 134); 
      previousX -= 3; 
      if (movementFlag) { 
       g.drawImage(stick1, previousX, previousY, this); 
       movementFlag = false; 
      } else { 
       g.drawImage(stick2, previousX, previousY, this); 
       movementFlag = true; 
      } 
     } 
    } 

    class MyDrawingPanel2 extends JPanel { 

     private static final long serialVersionUID = 1L; 

     public MyDrawingPanel2() { 
      setBackground(Color.WHITE); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      g.clearRect(previousX, previousY, stick1.getWidth(this), stick1.getHeight(this)); 
      g.drawLine(0, 134, 600, 134); 
      previousX += 3; 
      if (movementFlag) { 
       g.drawImage(stick1, previousX, previousY, this); 
       movementFlag = false; 
      } else { 
       g.drawImage(stick2, previousX, previousY, this); 
       movementFlag = true; 
      } 
     } 
    } 
} 
+0

使我们更容易一点......你得到了什么错误,或者你有什么 – DaMainBoss

+1

会发生什么crossposted http://www.daniweb.com/software-development/java/threads/374753 – mKorbel

回答

1

我跑你的代码,这是工作。但我认为,如果先移动图A然后移动图B,则不需要该图B将“卡入”图A的X位置,反之亦然。您可以通过添加单独的previousX变量(我们称它们为previousXApreviousXB)来实现,因为图A和图B因为现在两个数字都使用previousX

您的代码应该是这样的

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.*; 
import javax.imageio.*; 
import java.io.*; 

public class Transformation2D extends JFrame implements ActionListener { 

    MyDrawingPanel drawingPanel = new MyDrawingPanel(); 
    MyDrawingPanel2 drawingPanel2 = new MyDrawingPanel2(); 
    JButton goLeft = new JButton("<--"); 
    JButton goRight = new JButton("-->"); 
    int previousXA; 
    int previousXB; 
    int previousY; 
    Image stick1; 
    Image stick2; 
    boolean movementFlag = false; 

    public Transformation2D() { 
     super("Walking Stickfigure"); 
     setSize(600, 200); 
     previousXA = 250; 
     previousXB = previousXA; 
     previousY = 0; 
     setBackground(Color.WHITE); 
     setLayout(new BorderLayout()); 
     add(drawingPanel, BorderLayout.CENTER); 
     add(drawingPanel2, BorderLayout.SOUTH); 
     drawingPanel2.add(goLeft); 
     drawingPanel2.add(goRight); 
     stick1 = null; 
     stick2 = null; 

     try { 
      stick1 = ImageIO.read(new File("./sw1.png")); 
      stick2 = ImageIO.read(new File("./sw2.png")); 
     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", 
        JOptionPane.ERROR_MESSAGE); 
      System.exit(0); 
     } 
     goLeft.addActionListener(this); 
     goRight.addActionListener(this); 
     setVisible(true); 
    } 

    public void actionPerformed(ActionEvent ae) { 
     if (ae.getSource() == goLeft) { 
      drawingPanel.repaint(); 
     } else if (ae.getSource() == goRight) { 
      drawingPanel2.repaint(); 
     } 

    } 

    public static void main(String[] args) { 
     new Transformation2D(); 
    } 

    class MyDrawingPanel extends JPanel { 
     public MyDrawingPanel() { 
      setBackground(Color.WHITE); 
     } 

     public void paintComponent(Graphics g) { 

      g.clearRect(previousXA, previousY, stick1.getWidth(this), 
        stick1.getHeight(this)); 
      g.drawLine(0, 134, 600, 134); 
      previousXA -= 3; 

      if (movementFlag) { 
        g.drawImage(stick1, previousXA, previousY, this); 
       movementFlag = false; 
      } else { 
       g.drawImage(stick2, previousXA, previousY, this); 
       movementFlag = true; 
      } 
     } 
    } 

    class MyDrawingPanel2 extends JPanel { 
     public MyDrawingPanel2() { 
      setBackground(Color.WHITE); 
     } 

     public void paintComponent(Graphics g) { 

      g.clearRect(previousXB, previousY, stick1.getWidth(this), 
        stick1.getHeight(this)); 
      g.drawLine(0, 134, 600, 134); 
      previousXB += 3; 

      if (movementFlag) { 
       g.drawImage(stick1, previousXB, previousY, this); 
       movementFlag = false; 
      } else { 
       g.drawImage(stick2, previousXB, previousY, this); 
       movementFlag = true; 
      } 
     } 
    } 

} 
+0

对不起,先生,你的意思是你提供的这个代码将会工作吗? ,因为它有同样的问题 – Haroyee

+0

然后有些事情在你的设置中出错。这个对我有用。也许你已经把你的照片放在不同的路上。请更具体地说明究竟什么不适合你。 –