2015-10-29 4 views
1

У меня есть 3 задания относительно моего кода 1 ==> Как удалить выбранную форму в моем коде; когда я нажимаю правой кнопкой мыши, каждая фигура удаляется, 2 ==> Я ПОЛНОСТЬЮ не знаю, как выделить перекрывающиеся: 3 ==> прямо сейчас, когда я нажимаю на свою JPanel, форму, нарисованную из точки, где была нажата мышь, где как это должно быть в центре указателя мышиКак выделить перекрываемую область между двумя фигурами

Заранее спасибо На самом деле я новичок в Java. это мой код,

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Rectangle; 
import java.awt.Shape; 

import javax.swing.JPanel; 
import javax.swing.JButton; 

import Delete.Selection; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.geom.Area; 
import java.util.ArrayList; 

public class MyPanel extends JPanel { 

    ArrayList<MyRect> list = new ArrayList<MyRect>(); 



    public MyPanel() { 
     addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 


       if(e.getButton() == MouseEvent.BUTTON1) { 
        MyRect r = new MyRect(e.getX(), e.getY()); 
        list.add(r); 

        repaint(); 
        } 


        else { 
         list.clear(); 
         repaint(); 
        } 
       } 

      } 
     ); 
     setPreferredSize(new Dimension(600, 400)); 
     setBackground(Color.CYAN); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 



     for (int i = 0; i < list.size(); i++) { 
      MyRect r = list.get(i); 
      g.fillRect(r.x, r.y, r.w, r.h); 
     } 
    } 

class MyRect { 
    int x, y, w=100, h=100; 
    Color c = Color.BLACK; 

    public MyRect(int x, int y, int w, int h, Color color) { 
     this.x = x; 
     this.y = y; 
     this.w = w; 
     this.h = h; 
     this.c = color; 

    } 

    public MyRect(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 


}} 
+1

Что-то вроде [это] (http://stackoverflow.com/questions/22160245/intersection-of-two-rectangles-with-paintcomponent/22160470#22160470) или [это] (http://stackoverflow.com/ вопросы/15514738/java-help-overlapping-rectangles-that-paint-a-new-color-where-the-rectangles-ov/15514834 # 15514834) или [this] (http://stackoverflow.com/questions/20927189/обнаружение столкновения из-двух-спрайтов-что-можно-вращать/20928531 # 20928531)? – MadProgrammer

+0

@MadProgrammer. Да, сэр, что-то вроде этого, –

ответ

2

как выделить перекрывающую область

Вы можете использовать intersection(...) метод Rectangle класса, чтобы получить прямоугольник, чтобы нарисовать:

import java.awt.*; 
import javax.swing.*; 
import java.awt.geom.*; 

public class IntersectingRectangles extends JPanel 
{ 
    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 

     Graphics2D g2d = (Graphics2D) g.create(); 

     Dimension d = getSize(); 
     int width = d.width * 3/4; 
     int height = d.height * 3/4; 

     Rectangle r1 = new Rectangle(0, 0, width, height); 
     g2d.setColor(Color.BLUE); 
     g2d.fill(r1); 

     Rectangle r2 = new Rectangle(d.width - width, d.height - height, width, height); 
     g2d.setColor(Color.YELLOW); 
     g2d.fill(r2); 

     // Specific solution when using Rectangles only 

     Rectangle r3 = r1.intersection(r2); 
     g2d.setColor(Color.GREEN); 
     g2d.fill(r3); 
/* 
     // For a more generic solution using any Shape 

     Area area = new Area(r1); 
     area.intersect(new Area(r2)); 
     g2d.setColor(Color.GREEN); 
     g2d.fill(area); 
*/ 
     g2d.dispose(); 

    } 

    @Override 
    public Dimension getPreferredSize() 
    { 
     return new Dimension(300, 300); 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("Intersecting Rectangles"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new IntersectingRectangles()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

Как удалить выбранную форму в моем коде; когда я щелкнул правой кнопкой мыши, каждая фигура удалена,

Вам необходимо выполнить итерацию через ArrayList, содержащую прямоугольники. Затем вы можете использовать метод Rectangle.contains(yourMousePoint), чтобы определить, какой Rectangle вы нажали. Вам нужно будет сохранить ссылку на прямоугольник. Затем, когда цикл завершает выполнение, вы можете удалить Rectangle из ArrayList.

форма обращается с точки, где щелкнули мышью, где, как это должно быть в центре указателя мыши

Затем вам нужно изменить х/у расположение прямоугольника. Это должно быть:

int x = mousePoint.x - (width/2); 
int y = mousePoint.y - (height/2); 

где ширина/высота представляют размер прямоугольника, который вы хотите нарисовать.

+0

благодарю вашего очень большого уважения @camickr. –