Компонент добавляется не корректно - 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());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д