Решенные.Как сделать интерактивный график/строки в Java?
У меня был вопрос до этого, но это было очень плохо опубликовано, так что здесь оно идет снова, согласно лучшим правилам.
Я хочу, чтобы создать какой-то стиль графа, как это изображение:
.
Он основан на законе физики, Snell's Law. На данный момент мне удалось нарисовать график сам с базовым Line2D.Double, который вы можете увидеть here (Line.java). Тогда все, что мне нужно сделать, это, в классе интерфейса, добавьте строки в массив в этом классе, так:
LinesArray.addLine(150 , 25 , 150 , 275);
И каждый раз, когда он добавляет новый, он перерисовывает, как вы можете видеть в коде образец.
Но проблема в том, что я понятия не имею, как сделать это интерактивным. Я хотел сделать его интерактивным, как и в том, что вы могли бы на самом деле переместить эти строки и в то же время, при перемещении первой линии, второй будет двигаться в соответствии с формулой закона Снеллы, что:
n1 * грех (a1) = n2 * sin (a2)
Учитывая, что a1 - первый (левый) угол, a2 - второй (правый) угол в первом изображении.
Прекрасным примером того, что я надеюсь достичь, является this one. И если интерактивное движение слишком тяжелое (я нахожусь на расписании 2 дня), возможно также и this example.
Исправьте меня, если я ошибаюсь, но для второго, все, что мне нужно сделать, это вычислить координаты мыши и провести и вычислить все оттуда.
Here (menu_ui.java) - мой класс интерфейса, в котором метод, с которым я в настоящее время работает с линиями, является «menuSnell()» и here (Snell.java - это мой класс Snell, который содержит логику. Извинения за комментарии португальцев, но это довольно простой код, который вам действительно не нужен, чтобы понять, плюс я разделил его на читаемые методы.
В основном, мой вопрос заключается в том, как сделать эти линии интерактивными в том, как я описал выше.
Спасибо!
Вам нужно добавить «MouseListener» к вашему компоненту, следить за щелчками мыши и определить, был ли щелчок на линии или нет ... – MadProgrammer
Yup - это точно. Вам нужно: 1) Нарисуйте свое изображение на панели (или эквиваленте), 2) добавьте «MouseListener» (чтобы вызвать событие «что-то изменилось»), 3) у вас есть событие mouse «repaint()» вашего графического объекта и 4) подкласс «paint()» для вызова вашего графического кода. Вот хороший учебник: http://docs.oracle.com/javase/tutorial/2d/advanced/user.html – FoggyDay