Действие управляет по сравнению с классами Действия?

Также стоит отметить, что можно использовать * и ** при вызывании функций также. Это - ярлык, который позволяет Вам передавать несколько аргументов функции непосредственно с помощью или списка/кортежа или словаря. Например, если у Вас есть следующая функция:

def foo(x,y,z):
    print("x=" + str(x))
    print("y=" + str(y))
    print("z=" + str(z))

можно сделать вещи как:

>>> mylist = [1,2,3]
>>> foo(*mylist)
x=1
y=2
z=3

>>> mydict = {'x':1,'y':2,'z':3}
>>> foo(**mydict)
x=1
y=2
z=3

>>> mytuple = (1, 2, 3)
>>> foo(*mytuple)
x=1
y=2
z=3

Примечание: ключи mydict нужно назвать точно как параметры функции foo. Иначе это бросит TypeError:

>>> mydict = {'x':1,'y':2,'z':3,'badnews':9}
>>> foo(**mydict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got an unexpected keyword argument 'badnews'
6
задан Joe Attardi 30 July 2009 в 18:32
поделиться

4 ответа

IMO, лучше использовать отдельные слушатели для действий.

Таким образом, вы оставляете делегирование того, какое действие должно происходить, на право Swing. Вам не нужно сравнивать строки, чтобы решить, что делать.

Наличие одного огромного ActionListener для более чем одного действия мне кажется нарушением шаблона.

4
ответ дан 16 December 2019 в 21:44
поделиться

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

Кроме того, если вы используете Action , вы можете а) применить его к более чем одному компоненту (например, кнопке и пункту меню) б) вызвать setEnable для включения / отключения его для всех компонентов, к которым он прикреплен, и c) Также используйте его для определения различных настроек для компонентов, к которым он прикреплен (а именно, текстовой метки, текста всплывающей подсказки, клавиши быстрого доступа, значка и т. Последний выполняется с помощью метода putValue , и повторный вызов этого метода изменит настройки для всех компонентов, к которым он подключен.

В частности,

3
ответ дан 16 December 2019 в 21:44
поделиться

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

Использование классов Action позволяет лучше выполнить рефакторинг. В свинге один из лучших способов начать - убедиться, что в вашем коде НЕТ строк. Почти каждое «новое» будет в каком-то цикле чтения из набора данных (часто набор данных такой же простой, как массив) - как только вы начнете читать из такого набора данных, действия могут вам очень помочь.

Вы используете данные для создания своего действия, данные для создания вашего элемента управления и данные для их связи - таким образом вы можете оказаться очень близко (или на) 0 строк кода для нового элемента управления.

Один раз вы начинаете программировать таким образом и видите закономерности, это '

1
ответ дан 16 December 2019 в 21:44
поделиться

Это полезно, если у вас есть несколько кнопок или компонентов, которые выполняют одно и то же действие (т. Е. Несколько кнопок выхода на одной странице будут использовать один и тот же код)

Установите для них одно и то же действие команда, и все они будут использовать один и тот же код в слушателе

JButton.addActionListener(this);
JButton2.addActionListener(this);
JButton.setActionCommand("exit");
JButton2.setActionCommand("exit");

public void ActionPerformed(ActionEvent e){
    if(e.getActionCommand=="exit")
        System.exit(0);
}
0
ответ дан 16 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: