Перемещение изображений на Java - PullRequest
1 голос
/ 28 февраля 2012

Я хочу, чтобы изображение, которое я нарисовал в классе рисования, переместилось влево по моему JFrame, когда отметился таймер.Но я не знаю, как это сделать.Кроме того, я пытаюсь заставить мою программу сделать так, чтобы изображение исчезало при нажатии на изображение.

класс movingball

import java.awt.Graphics2D;    
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
import javax.swing.Timer;

public class movingball extends JPanel{

    private int move=50;
    private Timer timer = new Timer(move, new TimerListener());
    private int radius = 10;
    private int x = 300;    
    private int y = 0;

    public  movingball() {
          timer.start();
    }

    private class TimerListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        x=x-20;
        repaint();  }//trying to get the oval to move left 20 
    }

    protected void paintComponent(Graphics2D g){
    super.paintComponent(g);
    g.fillOval(x, 100 , radius * 2, radius * 2);    }
    }

класс movingControl

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;    
import javax.swing.JPanel;

public class movingControl extends JPanel {

private movingball ball= new movingball();

public movingControl(){
    JPanel panel = new JPanel();
    ball.setBorder(new javax.swing.border.LineBorder(Color.red));
    panel.addMouseListener(new movingballListener());
    setLayout(new BorderLayout());
    add(ball, BorderLayout.CENTER);
    add(panel, BorderLayout.SOUTH);
}
}

SnniperGameAppкласс

Я знаю, что написал неправильно снайпер

import javax.swing.JApplet;

public class SnniperGameApp extends JApplet {

static final long serialVersionUID = 2777718668465204446L;
//i dont know what this serial thing is. But my program wont start without it

public SnniperGameApp(){
    add(new movingControl());
}
}

ClickingEvent класс

import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

class movingballListener extends MouseAdapter{

    public void mouseReleased(MouseEvent e) {
        if ((e.getModifiers() & InputEvent.BUTTON1_DOWN_MASK) != 0) {
          System.out.println(  (e.getPoint()));}}
    }

1 Ответ

3 голосов
/ 28 февраля 2012

Вы не переиграли paintComponent() правильно.

С Javadoc , подпись paintComponent():

protected void paintComponent(Graphics g)

но у вас есть:

protected void paintComponent(Graphics2D g)

Сигнатуры метода должны совпадать - при необходимости вы можете безопасно привести Graphics к Graphics2D внутри метода.

Добавление аннотации @Override к методу - это хороший способ заставить компилятор проверить, что вы действительно переопределяете метод, а не просто пишете метод, который выглядит одинаково!


Вот рабочий SSCCE (я указал некоторые константы для экономии места, не воспринимайте это как хорошую практику для реального кода!):

public class MovingBall extends JPanel
{
    private Timer timer = new Timer(50, new TimerListener());
    private int x = 300;

    public MovingBall()
    {
        timer.start();
    }

    private class TimerListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            x -= 20;
            repaint();
        }
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.fillOval(x, 100, 20, 20);
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.add(new MovingBall());
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...