2016-05-12 9 views
-1

Я видел ответ на вопрос How do I create a right click context menu in Java Swing? и видел, как я могу создать меню. Однако, когда я связываю его с текстовой областью, не имеет значения, есть ли на нем что-либо написанное или нет, оно всегда отображает меню.Создайте контекстное меню правой кнопки мыши в текстовой области только в том случае, если оно не пустое и получение выбранного индекса

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

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

Текст Площадь:

Объект 1.

Объект 2.

Объект 3.

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

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

+0

Это не сложно. Попробуйте, и если у вас возникнет проблема, спросите нас. –

+0

Я попытался, и то, что я не могу сделать, это присоединиться к местоположению, которое я получаю от мыши (MouseEvent.getPoint()), и какой строке он соответствует в JTextArea, главным образом потому, что, поскольку он находится внутри scrollPane, когда я прокручиваю вниз, getPoint() не изменится, если я нажму на то же место. – Nhekas

+0

Посмотрите на метод getViewPosition JScrollPane. – FredK

ответ

1

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

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

Вместо этого я предлагаю вам использовать JList. Прочтите раздел из руководства Swing по телефону How to Use Lists для получения дополнительной информации и примеров.

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

+0

О, хорошо! Большое спасибо! Это облегчает! – Nhekas