Рисование прямоугольника с помощью MouseListener & MouseMotionListener - PullRequest
1 голос
/ 29 марта 2011

Я создал два пакета, Display и paint_core, которые содержат пять файлов Java: Displayable.java, Drawing.java, NewCordinates.java, OldCordinates.java и Main.java.

Я сталкиваюсь с некоторыми проблемами с координатами, и вывод идет не так, как хотелось бы.Что не так с моей программой?

Main.java

package paint_core;

import Display.Displayable;

public class Main {

    public Main() {
    }

    public static void main(String[] args) {
       new Displayable();
    }

}

Displayable.java

package Display;

import java.awt.Color;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;


public class Displayable extends JFrame implements MouseListener,MouseMotionListener{

    Drawing dr;
    int x,y;
     OldCordinates op;

    public Displayable() 
    {
        setVisible(true);
        dr = new Drawing();

        add(dr);
        dr.addMouseListener(this);
        dr.addMouseMotionListener(this);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void mouseDragged(MouseEvent e) 
    {

    NewCordinates np = new NewCordinates();

      np.setX(x);
      np.setY(y);
      np.setW(e.getX()-x);
      np.setH(e.getY()-y);

      op= dr.setXY(np.getX(),np.getY(),np.getW(),np.getH(),Color.RED,op);   
    }

    public void mouseMoved(MouseEvent e) 
    {

    }

    public void mouseClicked(MouseEvent e)
    {

    }

    public void mousePressed(MouseEvent e) {
          x=e.getX();
          y=e.getY();
         op = new OldCordinates();
          op.setX(x);
          op.setY(y);
          op.setW(x);
          op.setH(y);
    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

}

Drawing.java

package Display;

import java.awt.*;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JPanel;

public class Drawing extends JPanel

{

    private int x,y,w,h;
    Color r;
    OldCordinates op;

public OldCordinates setXY(int x,int y,int w,int h,Color r,OldCordinates op)

    {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
        this.r = r;
        this.op = op;
        //System.out.println("Old Cordinates" + op.getW()+"  "+op.getY());
        repaint();

        op.setH(h);
        op.setW(w);
        //System.out.println("New Cordinates" + w+"  "+h);

        return op;

    }
    @Override
    public void paint(Graphics g) {

       g.drawRect(op.getX(),op.getY(),op.getW(),op.getH());
       g.setColor(r); 
       g.drawRect(x,y,w,h);

    }

}

OldCordinates.java

package Display;

import java.awt.*;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JPanel;

public class Drawing extends JPanel
{
    private int x,y,w,h;
    Color r;
    OldCordinates op;

    public OldCordinates setXY(int x,int y,int w,int h,Color r,OldCordinates op)

      {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
        this.r = r;
        this.op = op;
        //System.out.println("Old Cordinates" + op.getW()+"  "+op.getY());
        repaint();

        op.setH(h);
        op.setW(w);
        //System.out.println("New Cordinates" + w+"  "+h);

        return op;

    }
    @Override

    public void paint(Graphics g) {

        //g.drawRect(op.getX(),op.getY(),op.getW(),op.getH());
       g.setColor(r); 
        g.drawRect(x,y,w,h);

    }

}

NewCordinates.java

package Display;


public class NewCordinates {
    private int x;
    private int y;
    private int w;
    private int h;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getW() {
        return w;
    }

    public void setW(int w) {
        this.w = w;
    }

    public int getH() {
        return h;
    }

    public void setH(int h) {
        this.h = h;
    }


}

1 Ответ

0 голосов
/ 06 апреля 2011

Вы должны переопределить paintComponent вместо paint. Если это не ваша проблема, пожалуйста, дайте более подробную информацию

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