如何突出两个形状之间的重叠区域

时间:2015-10-29 21:54:45

标签: java swing

我有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 个答案:

答案 0 :(得分: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();
            }
        });
    }
}
  

如何删除代码中的Selected Shape;当我右键单击每个形状被删除时,

您需要遍历包含Rectangles的ArrayList。然后,您可以使用Rectangle.contains( yourMousePoint )方法确定单击的Rectangle。您需要保存对Rectangle的引用。然后,当循环完成执行时,您可以从ArrayList中删除Rectangle。

  

从鼠标点击的位置绘制的形状,它应该位于鼠标指针的中心位置

然后你需要改变矩形的x / y位置。它应该是:

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

其中width / height表示要绘制的Rectangle的大小。