【问题标题】:How Can This Stickman Be Made to Be Interactive?如何使这个火柴人具有互动性?
【发布时间】:2017-11-30 17:47:49
【问题描述】:

所以,我需要通过用户输入让火柴人移动。当用户点击某个部分(头、手、脚和后部)时,他应该移动,但不知道该怎么做。 如果可能的话,还需要在角色周围设置一个限制,可能是矩形,以便限制每个部分可以拉动多远。 我的代码见下文;

// 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);

            }

    }

【问题讨论】:

    标签: java swing graphics jpanel


    【解决方案1】:

    使用MouseListener处理鼠标事件。

    另外,您应该重写paintComponent() 方法而不是paint(),因为paint() 也会绘制边框和其他内容。

    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

    编辑:您的问题还包括动画,您可以使用javax.swing.Timer 来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多