В настоящее время я работаю над уроками Java Swing после окончания первого набора уроков на Java. На этом занятии мы работаем над связью между различными компонентами (кнопками, панелями инструментов и т. Д.), Которые мы изучали. Проблема заключается в том, что «this» передается как аргумент метода для метода addActionListener(). Это работает, однако, я не совсем понимаю, что он делает. Я сделал некоторые исследования в отношении «этого» и обнаружил, что наиболее популярное использование для этого «ключевого слова» будет в конструкторах с переменными с одинаковыми именами. Я не мог найти пример, который бы соответствовал моему делу. Посмотрев на приведенный ниже код, я объясню, какие части кода я понимаю.Передача «этого» в качестве аргумента метода - Уточнение
import java.awt.FlowLayout; Implements FlowLayout class
import java.awt.event.ActionEvent; //Imports ActionEvent Class
import java.awt.event.ActionListener; //Imports ActionListener Interface
import javax.swing.JButton; //Imports JButton class
import javax.swing.JPanel; //Imports JPanel class
public class Toolbar extends JPanel implements ActionListener {
//^Inherits JPanel & Implements ActionListener Interface
private JButton helloButton; //Creating variable of JButton type
private JButton goodbyeButton; //Creating variable of JButton type
public Toolbar() { //Constructor
helloButton = new JButton("Hello"); //Creates new JButton
goodbyeButton = new JButton("Goodbye"); //Creates new JButton
helloButton.addActionListener(this); //Question 1
goodbyeButton.addActionListener(this); //Question 1
setLayout(new FlowLayout(FlowLayout.LEFT)); //Sets Layout Type to Left
add(helloButton); //Adds button to FlowLayout (Layout Manager) Interface
add(goodbyeButton); //Adds button to FlowLayout (Layout Manager) Interface
}
public void setTextPanel(TextPanel textPanel) {
//No Usage Yet!
}
public void actionPerformed(ActionEvent arg0) { //Unimplemented Method from ActionListener
System.out.println("A button was clicked"); //Prints after button is clicked.
}
}
Вопрос 1: Как вы можете видеть, после создания двух JButtons, мы добавляем метод addActionListener() для того, чтобы увидеть, обнаружить, если кнопка была нажата. Если он был нажат, то он выполнит любой код, введенный в actionPerformed, который реализуется из интерфейса ActionListener. На предыдущих уроках у нас был другой способ заставить кнопку реагировать на щелчок. Он сделал то же самое, но это выглядело так:
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
textPanel.appendText("Hello\n");
}
});
В этом примере, а не печатать на консоли, чтобы проверить, чтобы увидеть, если ActionListener() работала, мы просто добавляется текст в текстовой области от настраиваемый компонент. В коде непосредственно над этим текстом мы работаем с анонимным классом.
Итак ... Вопрос в том, что именно это происходит, поскольку оно передается как аргумент метода в addActionListener()? Я знаю, что он печатает «кнопку нажата» на консоль, но я не понимаю логики того, что «это» делает, чтобы отправить кнопку нажатой на actionPerformed().
Это то, что приложения выглядит следующим образом:
Это приложение, в движении, а кнопки уже напечатаны на консоль после нажатия. Я думал, это может дать вам лучшее представление о том, над чем я работаю. Я надеюсь, что кто-то может пролить свет на это и объяснить, как «это» работает в этом контексте. Спасибо!
Спасибо! Ваш ответ был очень понятен. –