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