При нажатии мышь будет выводить квадраты, но при нажатии пробела не будет выводить один квадрат - PullRequest
0 голосов
/ 02 мая 2020

Я учусь в настоящее время Java и ради интереса я решил попробовать сделать простую программу рисования, используя то, что я знаю. В настоящее время у меня есть программа, которая, когда пользователь нажимает на кнопку мыши, будет следовать ряду прямоугольников, куда направляется их мышь. В настоящее время я пытаюсь добавить функцию, которая, когда пользователь нажимает пробел, в определенном месте появится квадрат. Пока мышечная часть программы работает как положено, независимо от того, что я пытаюсь сделать, пробел никогда не приведет к появлению прямоугольника в любом месте экрана. Я потратил много времени, пытаясь понять это, и до сих пор не имею ни малейшего понятия. Ниже приведен метод, в котором все это происходит. Может ли кто-нибудь помочь мне понять, что я делаю неправильно, я чувствую, что это очевидно, и я слишком неопытен, чтобы это увидеть. Спасибо!

    private Timer timer;

    private boolean startPaint = false;
    private int restart = 1;

    private int x;
    private int y;

    //=======Public Methods=======

    //=======Public Constructor(s)
    public PaintCanvas()
    {
        addMouseMotionListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);

        timer = new Timer(1, this);
        timer.start();
    }

    //=======Other Public Methods=======
    public void paint(Graphics g)
    {
        if(restart == 0)
        {
            clearCanvas(g);
        }

        g.setColor(Color.black);
        g.fillRect(x, y, 10, 10);
        g.dispose();
    }

    public void clearCanvas(Graphics g)
    {
        g.setColor(Color.green);
        g.fillRect(24, 24, 100, 100);
        g.dispose();
    }

    //=======Public Methods From Interfaces=======

    //ActionListener
    @Override
    public void actionPerformed(ActionEvent e)
    {
        // TODO Auto-generated method stub
        timer.start();

        if(startPaint)
        {
            repaint();
            restart++;
        }
    }

    //MouseMotionListener
    @Override
    public void mouseDragged(MouseEvent e)
    {
        // TODO Auto-generated method stub
        startPaint = true;

        x = e.getX();
        y = e.getY();

        if(startPaint)
            System.out.println(x + "," + y);
    }

    @Override
    public void mouseMoved(MouseEvent e)
    {
        // TODO Auto-generated method stub
        startPaint = false;
    }

    //KeyListener
    @Override
    public void keyTyped(KeyEvent e)
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_SPACE)
        {           
            restart = 0;  
            repaint();      
        }
    }

    @Override
    public void keyReleased(KeyEvent e)
    {
        // TODO Auto-generated method stub

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...