Компонент добавляется не корректно - Java
Формулировка задачи:
Доброго времени суток!
Хочу сделать так, чтобы при нажатии мышки (pressed), ведении (dragged) и затем отпускании (released) создавалась панель с нарисованной на ней фигурой (квадрат, например). Для этого сделал свой компонент панели ShapePanel:public class ShapePanel extends JPanel
{
Point p1, p2;
public ShapePanel(Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
setLayout(null);
setBounds(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);
setBackground(Color.BLUE);
// в будущем хотелось бы его ещё и перемещать по панельке, где он будет существовать =)
setMoveListener(this);
setVisible(true);
}
@Override
public void paint(Graphics g)
{
Graphics2D gg = (Graphics2D) g;
gg.setStroke(new BasicStroke(5));
gg.drawRect(0, 0, WIDTH, HEIGHT);
}
private void setMoveListener(final JComponent j)
{
j.addMouseListener(new MouseAdapter()
{
private Point prevLoc;
@Override
public void mousePressed(MouseEvent e)
{
prevLoc = e.getPoint();
}
@Override
public void mouseDragged(MouseEvent e)
{
Component comp = (Component) e.getSource();
comp.setLocation((int) ( comp.getX() + (e.getX()-prevLoc.getX()) ),
(int) ( comp.getY() + (e.getY()-prevLoc.getY())) );
prevLoc = e.getPoint();
}
@Override
public void mouseReleased(MouseEvent e)
{
prevLoc = null;
}
@Override
public void mouseEntered(MouseEvent e)
{
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
}
@Override
public void mouseExited(MouseEvent e)
{
setBorder(null);
}
});
}
}public class PPanel extends JPanel
{
List<ShapePanel> list;
public PPanel()
{
setBounds(0, 0, 600, 600);
setBackground(Color.PINK);
list = new ArrayList<ShapePanel>();
MouseAction ma = new MouseAction();
addMouseListener(ma);
addMouseMotionListener(ma);
}
@Override
public void paint(Graphics g)
{
for(ShapePanel panel : list)
panel.repaint();
}
public void addShape(ShapePanel panel)
{
list.add(panel);
add(panel);
repaint();
}
private class MouseAction extends MouseAdapter
{
boolean creation = false;
boolean move = false;
Point p1, p2;
ShapePanel panel = null;
public MouseAction()
{
p1 = new Point();
p2 = new Point();
}
@Override
public void mousePressed(MouseEvent event)
{
if (!creation)
{
creation = true;
p1.x = event.getX();
p1.y = event.getY();
}
}
@Override
public void mouseDragged(MouseEvent event)
{
if (creation)
{
p2.x = event.getX();
p2.y = event.getY();
}
}
@Override
public void mouseReleased(MouseEvent event)
{
if (creation)
{
p2.x = event.getX();
p2.y = event.getY();
ShapePanel panel = new ShapePanel(p1, p2);
addShape(panel);
creation = false;
}
}
}
}Заранее благодарю за любые советы!
Решение задачи: «Компонент добавляется не корректно»
textual
Листинг программы
gg.fillRect(0, 0, this.getWidth(), this.getHeight());