2017-11-30 18 views
1

그래서, 나는 스틱 맨을 사용자 입력으로 움직일 수있게 만들 필요가있다. 사용자가 파트 (머리, 손, 발 및 뒤쪽)를 클릭 할 때 이동해야하며이 작업을 수행하는 방법을 모를 수 있습니다. 가능하면 문자 주위에 제한이 있어야하며 직사각형, 각 부분을 얼마나 멀리 당길 수 있는지에 대한 제한이 있습니다. 내 코드는 아래를 참조하십시오.이 Stickman은 어떻게 상호 작용할 수 있습니까?

// Created by Charlie Carr - (28/11/17 - /11/17) 
    import java.awt.*; 
    import java.applet.Applet; 
    import javax.swing.*; 
    import java.awt.Graphics; 
    import java.awt.geom.*; 
    import java.awt.image.BufferedImage; 
    //Imports complete 

    //Suppress warning about undeclared static final serialVersionUID field in VS Code 
    @SuppressWarnings("serial") 
    public class Animator extends JPanel { 
      public static class AnimatorWindow extends JPanel { 
        public void paint(Graphics page) { 
          setBackground(Color.gray); 
          setForeground(Color.white); 
          super.paintComponent(page); 
          page.drawString("Stickmen Animation Station", 150, 15); 
          //draw the head 
          //x1, y1, x2, y2 
          page.drawOval(90, 60, 20, 20); 
          // draw the body 
          page.drawLine(100, 80, 100, 110); 
          // draw the hands 
          page.drawLine(100, 90, 80, 105); 
          page.drawLine(100, 90, 120, 105); 
          //draw the legs, he hasn't a leg to stand on.. 
          page.drawLine(100, 110, 85, 135); 
          page.drawLine(100, 110, 115, 135); 
        } 
      } 

      public static void main(String[] args) { 
        AnimatorWindow displayPanel = new AnimatorWindow(); 

        JPanel content = new JPanel(); 
        content.setLayout(new BorderLayout()); 
        content.add(displayPanel, BorderLayout.CENTER); 
        //declare window size 
        int x = 480; 
        int y = 240; 

        JFrame window = new JFrame("GUI"); 
        window.setContentPane(content); 
        window.setSize(x, y); 
        window.setLocation(101, 101); 
        window.setVisible(true); 

      } 

    } 

답변

1

마우스 이벤트를 처리하려면 MouseListener을 사용하십시오.

또한 paint()은 테두리와 다른 것들을 칠하기 때문에 paint() 대신 paintComponent() 메서드를 재정의해야합니다. 귀하의 문제는 애니메이션을 포함, 당신은 그렇게 할 수있는 javax.swing.Timer를 사용할 수 있습니다 스윙 이벤트에 대한 자세한 내용은

public static class AnimatorWindow extends JPanel implements MouseListener{ 
    public AnimatorWindow(){ 
     setBackground(Color.gray); 
     setForeground(Color.white); 
     //add the listener 
     addMouseListener(this); 
    } 
    public void paintComponent(Graphics page) { 
     super.paintComponent(page); 
     //You should not alter the Graphics object passed in 
     Graphics2D g = (Graphics2D) page.create(); 

     //draw your stuff with g 
     g.drawString("Stickmen Animation Station", 150, 15); 
     ....... 

     //finish 
     g.dispose(); 
    } 


    public void mouseEntered(MouseEvent e){} 
    public void mouseExited(MouseEvent e){} 
    public void mousePressed(MouseEvent e){} 
    public void mouseReleased(MouseEvent e){} 
    public void mouseClicked(MouseEvent e){ 
     //implement your clicking here 
     //Use e.getX() and e.getY() to get the click position 
    } 
} 

, this site

편집을 확인합니다.