2016-02-25 3 views
1

я знаю, когда использовать ключевое слово «это» для полей и конструкторов, но я не уверен, когда он передается в качестве аргументаЧто такое ключевое слово «это» со ссылкой, если оно дается в качестве аргумента

import javax.swing.*; 
    import java.awt.event.*; 

    public class SimpleGui implements ActionListener { 
     JButton button; 

    public static void main (String[] args) { 
     SimpleGui gui = new SimpleGui(); 
     gui.go(); 
    } 

    public void go() { 
     JFrame frame = new JFrame(); 
     button = new JButton("click me"); 

     button.addActionListener(this); 

     frame.getContentPane().add(button); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent event) { 
     button.setText("I've been clicked!"); 
    } 
} 
+7

Это текущий экземпляр 'SimpleGui'. –

ответ

6

button.addActionListener(this); линии означает:

  • Добавить слушатель действия, выполняемых на объекте button
  • сделать слушатель текущего экземпляра SimpleGui в контексте (SimpleGui происходит реализовать интерфейс ActionListener)

Так что, когда кнопка нажата, SimpleGui#actionPerformed должен быть вызван.

+0

Для экземпляра JButton нужен еще один экземпляр - в этом случае SimpleGui - который реализует Listener –

+1

Чтобы лучше выразить его, экземпляр 'JButton' может использовать экземпляр' ActionListener', чтобы реагировать на действия, выполняемые над ним. Поскольку 'ActionListener' является интерфейсом, вам нужен экземпляр класса, реализующего' ActionListener'. Вы можете добавить практически любой класс, который вы хотите, в качестве слушателя кнопки, если он реализует «ActionListener». Также обратите внимание, что вы можете добавить нескольких слушателей! – Mena

0

Это ключевое слово, которое означает экземпляр класса, в классе

public class SimpleGui implements ActionListener { 

this является экземпляром SimpleGui, это может быть и объект (любой), который осуществляет ActionListener

Если вы вызываете метод, который принимает this, это потому, что этот аргумент является объектом класса SimpleGui, или даже б etter, является объектом (независимо от того, какой из них), который реализует ActionListener .

+0

да, я обновлял сообщение, thnxs для комментария в любом случае –

1

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

button.addActionListener (это);

addActionListener() требует передать экземпляр, который реализует интерфейс ActionListener.

И вот SimpleGui - это ActionListener, поскольку он реализует этот интерфейс. Следовательно, в SimpleGui вы пишете,

button.addActionListener (this);

где это экземпляр SimpleGui который реализует ActionListener

 Смежные вопросы

  • Нет связанных вопросов^_^