Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2017, 13:15   #1
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию Перемещение компонентов и другие проблемы

Доброго времени суток!

Делаю простое приложение, где при нажатии, ведению мышки и отпускании добавляется панель (ShapePanel), на которой рисуется фигура (в данном случае - прямоугольник).

Есть несколько проблем:
1) При добавлении на панель новой фигуры (т.е. панели с фигурой на ней) фон получается "прозрачным", хотя в конфигурации класса (ShapePanel) прописан СИНИЙ цвет. Что влияет на подобный результат и как это "исправить"?)
2) Также пытаюсь написать механизм перемещения фигур (т.е. панелей с фигурами) мышкой. Проблема в том, что обработчик не заходит в mouseDragged метод (что является жизненно важным для механизма перетаскивания). Почему?

Класс общей (главной) панели:
Код:
public class PPanel extends JPanel
{
	public PPanel()
	{
		setLayout(null);
		setBounds(0, 0, 600, 600);
		setBackground(Color.PINK);
		MouseAction ma = new MouseAction();
		addMouseListener(ma);
		addMouseMotionListener(ma);
		
		add(new ShapePanel(new Point(20,20), new Point(100,100)));
	}
	
	public void createShape(ShapePanel panel)
	{
		add(panel);
		
		//repaint();
		//invalidate();
		updateUI();
	}

	private class MouseAction extends MouseAdapter
	{
		boolean creation = false;
		Point p1, p2;

		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();
				
				createShape(new ShapePanel(p1, p2));
				
				creation = false;
			}
		}
	}
}
Класс панели с фигурой (которые добавляются на основную панель):
Код:
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, this.getWidth(), this.getHeight());
	}

	private void setMoveListener(final JComponent j)
	{
		j.addMouseListener(new MouseAdapter()
		{
			private Point currPos;
			private Point mousePos;
			private Component comp;

			@Override
			public void mousePressed(MouseEvent e)
			{
				//prevLoc = e.getPoint();
				comp = (Component) e.getSource();
				mousePos = comp.getParent().getMousePosition();
				//currPos = comp.getLocation();
			}

			@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();*/
				currPos = comp.getLocation();
				
				Container c = comp.getParent();
				
				Point mouse = c.getMousePosition();
				
				if (mouse.x > mousePos.x)
					currPos.x++;
				else if (mouse.x < mousePos.x)
					currPos.x--;
				
				if (mouse.y > mousePos.y)
					currPos.y++;
				else if (mouse.y < mousePos.y)
					currPos.y--;
				
				mousePos = mouse;
			}

			@Override
			public void mouseReleased(MouseEvent e)
			{
				//prevLoc = null;
				comp.setLocation(currPos);
				comp = null;
				currPos = null;
			}		
		});
	}
}
SnapeEye вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение визуальных компонентов. Dvoishnik Общие вопросы Delphi 6 26.01.2016 14:35
Перемещение папок в другие папки по списку из excel АННА-ЕАО Microsoft Office Excel 3 07.01.2016 22:42
Масштабирование и перемещение компонентов Dennis777 Общие вопросы Delphi 13 28.02.2013 21:30
Перемещение компонентов по форме artemavd Общие вопросы Delphi 2 24.04.2012 19:28
Перемещение компонентов _SERGEYX_ Общие вопросы Delphi 2 10.04.2008 13:33