Edit - @ Uri правильно указал, что это было злоупотреблением аннотациями; пытаться создать собственно данные меню в аннотациях просто глупо.
Тем не менее, они хороши для связывания, я думаю, что я буду придерживаться их использования для связи текстовых данных с методами (часть @Menu ("File")), так как они более явные и гибкие, чем отражение имени метода , Также я многому научился, возиться с этим. Я опубликую код здесь через несколько дней в качестве ответа.
- оригинальный пост -
Я не использовал эти новомодные аннотации, но они выглядят удивительно интересно. У меня проблемы с выяснением синтаксиса (или, что более правильно, лучший способ его использовать).
При написании некоторого кода в ответ на этот вопрос Мне пришло в голову, что мои методы устарели.
Раньше я анализировал строку, чтобы определить структуру моего метода, а затем использовал отражение, чтобы передать ее классам, но я думаю, что аннотации могли бы сделать структуру меню намного лучше.
Я бы хотел заменить свой тестовый класс в файле на что-то вроде этого:
@TopMenu("File,Edit")
@Menu(name="File","Save,Load,Print,Preview,Quit")
@Menu(name="Print","Preview,Print")
@Menu(name="Edit","Copy,Paste")
public class TestMenu {
@MenuItem ("Save")
public void save() {
System.out.println("saved");
}
@MenuItem ("Load")
public void load() {
System.out.println("loaded");
}
...
и передать весь класс методу, который производит и возвращает JMenuBar, привязанный к экземпляру класса, без дальнейшего ввода.
Первая проблема в том, что я не могу понять, как передать строку по умолчанию, все они хотят иметь (attribute = "value") вместо just ("value"), это можно сделать? Я могу жить без этого, но это немного многословно. Было бы еще лучше, если бы я мог избавиться от паренов и / или кавычек, но я не затаил дыхание (думаю, для этого мне нужно было бы определить индивидуальный интерфейс для каждого пункта меню, это неприемлемо ).
Во-вторых, ему не нравятся несколько тегов @Menu для одного класса. Я мог бы обойти это, проанализировав одну строку, но мне было интересно, есть ли другой способ.
Самое главное, есть ли библиотека, которая это уже делает? (Если никто не придет с ним, я опубликую код в этой теме, когда он заработает, на случай, если кому-то еще будет интересно.)