Создайте всплывающее меню правой кнопкой мыши в текстовой области, только если оно не пустое и получение выбранного индекса

Я видел ответ на вопрос в Как мне создать контекстное меню, вызываемое щелчком правой кнопкой мыши в Java Swing? и увидел, как я могу создать меню. Однако, когда я связываю его с текстовой областью, не имеет значения, написано ли на нем что-либо или нет, оно всегда показывает меню.

Я использую текстовую область, чтобы показать, сколько объектов я создал из определенного класса (который я сохраняю в ArrayList). Мне нужно меню, в котором при нажатии на определенную строку текста он может иметь индекс объекта в ArrayList и использовать это меню для редактирования / удаления указанного объекта из ArrayList. Возможно ли это с текстовой областью или мне следует использовать другой тип отображающего компонента?

В качестве примера:

Текстовая область:

Объект 1.

Объект 2.

Объект 3.

Когда я выбираю, например, объект 1 правой кнопкой мыши, отображается меню с редактированием и удалением. Но когда я не выбираю ни один из них, меню не отображается. И когда он отображается, он может получить доступ к индексу объекта (объект 1 -> индекс 0, объект 2 -> индекс 1 и т. Д.)

Большое спасибо за вашу помощь, Некас


person Nhekas    schedule 12.05.2016    source источник
comment
Сделать это несложно. Попробуйте, и если у вас возникнут проблемы, спросите нас.   -  person Sergiy Medvynskyy    schedule 12.05.2016
comment
Я пробовал, но не могу присоединиться к местоположению, которое я получаю от мыши (MouseEvent.getPoint ()), и какой строке он соответствует в JTextArea, в основном потому, что, поскольку он находится внутри scrollPane, когда я прокручиваю вниз, getPoint () не изменится, если я нажму на то же место.   -  person Nhekas    schedule 12.05.2016
comment
Посмотрите на метод getViewPosition JScrollPane.   -  person FredK    schedule 12.05.2016


Ответы (1)


Я использую текстовую область, чтобы показать, сколько объектов я создал из определенного класса.

Не используйте JTextArea.

Вместо этого я бы посоветовал вам использовать JList. Прочтите раздел руководства по Swing о Как использовать списки для дополнительная информация и примеры.

JList имеет метод locationToIndex(...), который выдаст вам строку, в которой была щелкнута мышь. Затем вы можете получить объект из списка.

person camickr    schedule 12.05.2016
comment
О, классно! Большое спасибо! Так становится проще! - person Nhekas; 12.05.2016