17:03

подскажите по java

Есть класс, в классе меню, сделанное с помощью JFrame.
Нужно добавить шорт-кат. Использовать акселлератор. Долго смотрю на документацию Оракла и не могу понять до конца класс KeyStroke. Просто скопированный код с самоучителя не предлагать (уже смотрела).

Вот так выглядит ДжейМенюИтем, куда хочу добавить шорт-кат.


....
JMenuItem textAusgeben = new JMenuItem("Text Strg+t");
menuDatei.add(textAusgeben);
.....
textAusgeben.setAccelerator(KeyStroke ......);
...

При щелчке по ДжейМенюИтем - вывод текста на косоль. Тот же вывод текста на консоль должен происходить по шорт-кату Strg+t.

Как я понимаю, я вызываю Метод .setAccelerator () из класса ДжейМенюИтем. В Метод передаю как Параментр KeyStroke переменную.
А класс KeyStroke я как раз не понимаю. Вижу,что в нем много методов getKeyStroke(....).

Комментарии
14.07.2015 в 17:27

Так, методом Тыка зарабатал такой шорт-кат

textAusgeben.setAccelerator(KeyStroke.getKeyStroke('E',InputEvent.ALT_DOWN_MASK));

Но не скажу, чтобы сильно поняла (
14.07.2015 в 17:35

ну и совсем шикарно елси кто-то может в двух словах объяснить структуру в JFrame.

В частности не совсем поняла. JMenu это субкласс JMenuItem. То есть ДжейМенюИтем это суперкласс? Тогда не очень понимаю строчку
...
JMenu menuDatei = new JMenu ("Datei");
....
JMenuItem textAusgeben = new JMenuItem("Text Alt+E");
menuDatei.add(textAusgeben);
...


Мы создаем переменную класс ДжейМеню. И мы зовем из нее метод .add. То есть мы зовем метод из субкласса и передаем в него объект суперкласса?
Разве так можно?

Я видела обратную запись. Когда суперкласс.названиеМетода (субкласс переменная).
15.07.2015 в 01:02

Sanctus Satanas
Не пишу на Яве, но аргумент в метод совершенно очевидно можно передать какой угодно. Вернее, такой, который он умеет принимать. То есть в данном случае совершенно не важно, кто там кому приходится по «родословной». Это просто аргумент у метода add такой.
Собственно, вот: http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html#add(javax.swing.JMenuItem)
А ещё есть метод с таким же названием, но принимающий String. И ещё несколько вариантов.
15.07.2015 в 12:45

мда, судя по ОраклДоку там можно делать.
И все равно не понимаю.... Как бы.... в более мелкий субкласс в качетсве метода передаем больший класс? Самой логики не понимаю.
16.07.2015 в 00:22

Sanctus Satanas
mitsarina, а почему бы и нет? :)
Только не в качестве метода, а в качестве аргумента (параметра) метода.

Ну... Некоторая логика в этом есть. И то и другое — кнопки (JAbstractButton). Причём, JMenu (меню) это такой JMenuItem (элемент меню), который при клике раскрывает список других JMenuItem'ов. А, например, панель меню это уже не кнопка и вообще вынесена в отдельный класс JMenuBar, который не наследуется ни от того, ни от другого.

Во всяком случае, так я понял всю эту конструкцию. :)