使用按钮和鼠标侦听器移动图形对象

时间:2019-06-13 07:33:38

标签: java mouselistener

需要一点帮助,我正在尝试为我的学校项目制作一个简单的游戏,但我无法移动坦克。

是否甚至可以仅通过按钮移动图形对象?

  

我知道这段代码很糟糕,许多事情本来可以更轻松,更短地完成,但是我们必须主要根据我们所学的知识来完成它...

我已经使用鼠标侦听器尝试了此操作,但到目前为止我还是做不到。这是我的代码。

public class Hra extends JPanel{
public int zakladc=1300;
public int zakladm=35;

public int GetZakladc(){
    return zakladc;
}

public int GetZakladm(){
    return zakladm;
}

    Pozadi();
    tank_cerveny();
    tank_modry();

    JTextField uhel_text=new JTextField(3);

    JTextField sila_text=new JTextField(3);

    JButton prava=new JButton("VPRAVO");           
    add(prava);
    class obsluha_prava implements MouseListener{
        public void mouseClicked(MouseEvent e) {
            if (natahu==0){
                zakladc=zakladc+1;


                System.out.println(zakladc);
            }
        }
        public void mousePressed(MouseEvent e) {

        }
        public void mouseReleased(MouseEvent e) {

        }
        public void mouseEntered(MouseEvent e) {

        }
        public void mouseExited(MouseEvent e) {

        }
    }

    JButton leva=new JButton("VLEVO");                
    add(leva);
    class obsluha_leva implements MouseListener{
        public void mouseClicked(MouseEvent e) {

        }
        public void mousePressed(MouseEvent e) {

        }
        public void mouseReleased(MouseEvent e) {

        }
        public void mouseEntered(MouseEvent e) {

        }
        public void mouseExited(MouseEvent e) {

        }
    }

}
public void Pozadi(){
Graphics g = img.getGraphics();
Color pisek=new Color(242,197,102);
    g.setColor(pisek);
    g.fillRect(0,665,1368,100);
}

public void tank_cerveny(){
    Graphics g = img.getGraphics();
    g.setColor(Color.BLACK);
    g.fillOval(zakladc,y-13,40,13);
    g.fillRect(zakladc-10,y-2*13+6,15,4);
    g.setColor(Color.RED);
    g.fillRect(zakladc+5,y-2*13+1,30,13);
}

public void tank_modry(){
    Graphics g = img.getGraphics();
    g.setColor(Color.BLACK);
    g.fillOval(zakladm,y-13,40,13);
    g.fillRect(zakladm+35,y-2*13+6,15,4);
    g.setColor(Color.BLUE);
    g.fillRect(zakladm+5,y-2*13+1,30,13);
}

它的工作方式是,按下“ VPRAVO”按钮,一个水箱将向右移动,或者“ VLEVO”,水箱将向左移动。

1 个答案:

答案 0 :(得分:1)

是的,这是完全可能的,这是一个简化的示例。

要在组件上绘画时,可以在其重写的getPassword()方法内进行。 在这种方法中,您可以访问用于绘制组件的实际paintComponent对象。

向将在单击时调用的每个按钮添加Graphics,根据按钮调整方向和坐标,然后调用ActionListener,这将强制组件使用新值重新绘制自身:

repaint()