Итак, как правило, я программист на C, C++ и C#, причем большинство моих графических интерфейсов в C# WPF. Я был помещен в проект, который использует Java, и я нахожу свой словарь для C#, который не хорошо сочетается с Java.Действия Java Clarification
Одна проблема, с которой я столкнулся, касается JButtons и, предположительно, всего, что называется «делегатами» на C#. Из этого example есть этот кусок кода:
jbnButton1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jtfInput.setText("Button 1!");
}
});
Просто, что это называется, где функция определена в качестве параметра (или передается в качестве параметра)? Кроме того, это лучшая практика? В проекте, в котором я включен, функция Initialize() заполнена такими функциями, как кнопки, флажки и т. Д., Что делает ее довольно неудобной. Я бы предпочел иметь определение на уровне класса, а не в Initialize().
Что приводит меня к другому example (пример верхнего кода). С помощью этих строк коды:
b1.addActionListener(this);
b3.addActionListener(this);
...
}
public void actionPerformed(ActionEvent e) {
if ("disable".equals(e.getActionCommand())) {
b2.setEnabled(false);
b1.setEnabled(false);
b3.setEnabled(true);
} else {
b2.setEnabled(true);
b1.setEnabled(true);
b3.setEnabled(false);
}
}
По сути, код присваивает действие для одной кнопки, b1, и кнопки три, b3 в тот же обработчик событий, который определен в объеме, я предпочитаю (за пределами того, где кнопки инициализируются). Есть ли способ заставить их указывать на разные функции? Кроме того, по телефону
.addActionListener(this);
Как фигура компилятор, чтобы использовать actionPerformed (ActionEvent е) в этом? Является ли что-то предопределенным, которое говорит, что действия решат «actionPerformed (ActionEvent e)»?
для вашего второго вопроса: это текущий класс, который должен реализовывать интерфейс ActionListener. Компилятор не «вычисляет», чтобы использовать actionPerformed. Вместо этого addActionListener требует, чтобы этот параметр реализовал интерфейс ActionListener, который включает метод actionPerformed(). Используйте ActionEvent.getSource(), чтобы определить, было ли нажато b1 или b3, затем вызовите соответствующий метод из метода actionPerformed. – DwB