В чем разница между mousePressed и mouseDragged в моей программе? - PullRequest
0 голосов
/ 14 февраля 2011

В такой программе для рисования, как Microsoft PaintTM, одной из доступных функций является рисование прямых линий. Вы Можно нарисовать прямую линию, нажав на мышь, чтобы указать, где должна начинаться линия. Затем с мышь все еще нажата, вы можете переместить мышь (перетаскивание мыши), и конечная точка линии создан как вы двигаетесь. Когда вы отпустите кнопку мыши, линия останется. Вы можете повторить этот процесс много время, создавая много разных строк в вашем документе PaintTM.

Если вы хотите эмулировать этот эффект в Java-программе, вы можете использовать MouseListener (mousePressed method) и MouseMotionListener (метод mouseDragged) для создания сегмента линии. Кроме того, мы хотел бы иметь возможность очистить область рисования с помощью «кнопки очистки» вверху. Кроме того, мы хотели бы изменить цвета всех линий, поместив несколько «цветных кнопок» вверху. Для того, чтобы выполнить все это, вам нужно будет использовать массивы координат, потому что каждый раз, когда вы вызываете перерисовку, вам нужно будет перерисовать все строки хранятся. * /

import java.awt.*;
import java.awt.event.*; //brings in the ability to read loops by 'event' of something
import javax.swing.*; //interface that extends both the MouseMotionListener and MouseListener interfaces

public class Draw extends JApplet implements MouseListener, MouseMotionListener
{
    private int [] x;
    private int [] y;
    private boolean changed = true;
    Display draw;

    public void init()
    {
        draw = new Display(); //use Display not draw
        setContentPane(draw); //lets you draw the stuff
        draw.setBackground(Color.green); //sets the background color to whatever you want
        draw.setFont (new Font("SansSerif", Font.BOLD, 24)); //this sets the font size and type
        draw.addMouseListener(this);
        draw.addMouseMotionListener(this); //adds the MouseMotionListener
    }                                      //to read in actions of the mouse       

    class Display extends JPanel
    {
        public void paintComponent(Graphics g) //Graphics __ <--name can be anything
        {
            super.paintComponent(g); //paintComponent(__) <-- __ has to match w/ the one above

            g.setColor(Color.black); //these are the 5 buttons at the top
            g.fillRect(2, 2, 95, 70); //
            g.setColor(Color.red); //
            g.fillRect(100, 2, 95, 70); //
            g.setColor(Color.blue); //
            g.fillRect(198, 2, 95, 70); //
            g.setColor(Color.gray); //
            g.fillRect(296, 2, 95, 70); //
            g.setColor(Color.cyan); //
            g.fillRect(394, 2, 95, 70); //
            g.setColor(Color.white);
            g.drawString("RESET", 10, 45);
            g.drawString("RED", 125, 45);
            g.drawString("BLUE", 215, 45);
            g.drawString("GRAY", 310, 45);
            g.drawString("CYAN", 410, 45);
        }
    }

    public void mousePressed(MouseEvent evt) 
    {
         int x = evt.getX();
         int y = evt.getY();
         changed = false;
         if (y > 2 && y < 70)
         {
             changed = true;
             if (x > 2 && x < 100)
             {
                 draw.repaint();
             }
             else 
                 changed = false;
         }
    }

    public void mouseDragged(MouseEvent evt) 
    {

    }

    public void mouseReleased(MouseEvent evt) {}
    public void mouseMoved(MouseEvent evt) {}
    public void mouseEntered(MouseEvent evt) {} // Some empty routines.
    public void mouseExited(MouseEvent evt) {} // (Required by the MouseListener
    public void mouseClicked(MouseEvent evt) {} // and MouseMotionListener interfaces).
}

1 Ответ

4 голосов
/ 14 февраля 2011

mousePressed должен срабатывать, когда кто-то щелкает (то есть когда он нажимает кнопку мыши, но не отпускает).

mouseDragged должен срабатывать после того, как человек нажимает кнопку мыши, а затем перемещает мышь.

Итак, вы можете подумать о сохранении координат x, y мыши на mousePressed, а затем нарисовать линию между этой позицией x, y и текущей позицией мыши x, y при срабатывании mouseDragged.

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