У меня есть приложение, в котором я хотел бы, чтобы пользователь мог навести указатель мыши и/или щелкнуть правой кнопкой мыши на линии, которая рисуется на JPanel. Я полностью ожидаю, что реализую линию как часть объекта, который будет обрабатывать все поведение, но у меня есть более фундаментальный вопрос о том, как реализовать линию, показанную на рисунке ниже. Во-первых, картинка:
Я могу нарисовать саму линию без каких-либо проблем, но в настоящее время это просто делается в переопределенном вызове paintComponent()
в родительском JPanel
. У меня есть зачатки идеи о том, как справиться с этим:
public class ChassisLink extends JComponent implements MouseListener
{
//Rectangle to handle mouse-over and right-click for each segment?
public ChassisLink()
{
initializeLink();
}
private void initializeLink()
{
//Init stuff
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//Paint the line(s)
}
//MouseListener events...
//When mouse-over on the line, display a tooltip
//When right clicking, display a different dialog
}
Проблема, которую, я думаю, я не понимаю, заключается в том, как выполнить проверку наведения мыши или щелчка. Должен ли я использовать прямоугольник и проверять, содержится ли мышь в данный момент в этом прямоугольнике, просто игнорируя треугольные части стрелок? Я совершенно оптимистичен по этому поводу. Тогда моя проблема заключается в том, как я буду отображать эти объекты ссылок поверх существующей панели JPanel, содержащей объекты шасси; это звучит как кандидат на JLayeredPane
, но есть ли подтверждение на этом пути?
В любом случае, я ценю любой вклад, который люди могут дать мне. Не стесняйтесь просить дополнительных объяснений, если что-то немного расплывчато.
Спасибо,
-Богатый