2016-01-11 4 views
1

Нет. компонентов вокруг и на Line2D.I хочу найти только перекрывающиеся. Я попытался line.getbounds(). пересекает (компонент), но он дает компоненты прямоугольной области, которые мне не нужны. Также расстояние иногда дает мне компонент который очень близок к линии, но не по линии. Любое решение?Определить компонент, перекрываемый Line2D

+0

Что вы имеете в виду под 'внахлест'? – innoSPG

+0

есть две конечные точки линии, как два Jbuttons ... линия вычерчена над этими двумя кнопками. Я хочу найти только эти JButtons..и не какие-либо другие JButtons, которые могут быть рядом с линией, но не на линии. –

ответ

1

Короткий ответ: проверить, по крайней мере, один из этих двух условий истинно

  • любая конечная точка линии находится внутри компонента, используйте метод содержит
  • линия пересекает любую сторону границ компонента, используйте метод пересечения.

Подробное описание: Возможны следующие случаи:

  • одна конечная точка линии находится внутри компонента (это включает случай, когда линия полностью внутри компонента);
  • линия пересекает компонент, но все конечные точки линии находятся за пределами объектов, в этом случае они пересекаются с двумя сторонами, но одного достаточно для проверки.
  • во всех других случаях, линия и компонент не перекрывают друг друга, и нам все равно.

Только средняя пуля немного сложна, однако, поскольку вы тестируете только jкомпонент, жизнь проста, потому что они представляют собой прямоугольники, выровненные с осью. Вы можете легко вычислить конечную точку сторон границ компонента. Оценки задаются точкой (x, y) шириной w и высотой h. Это дает вам четыре стороны, как:

  • (х, у) - (х + ш, у)
  • (х, у) - (х, у + з)
  • (х, у + Н) - (х, у + з)
  • (х + ш, у) - (х + ш, у + з)
+0

спасибо..и работал –

+0

@RajTrivedi, я рад узнать, что это вам помогло. Примите и проголосуйте за ответ, чтобы помочь другим людям, у которых есть схожие проблемы. – innoSPG

0

Если компоненты вы говорите о являются Java-компонентов, то они имеют прямоугольную форму и вы можете использовать line.intersects (component.getBounds())

, если они любой другой вид формы, вы должны определить, что форма и работать с линией математически, если они не являются прямоугольными