Композиция вместо наследования

#java #swing #actionlistener

#java #swing #actionlistener

Вопрос:

я видел пример использования ActionListener в коде путем реализации ActionListener. но здесь я хочу использовать функциональность ActionListener, используя ссылку на ActionListener.

 JButton createButton(){
    ActionListener al;       
    JButton button = new JButton();

    button.setBounds(130, 100, 100, 40); 
    button.setText("aaa");
    button.setSize(100, 40);
    button.setLayout(null);
    frame.add(button);

    return button;       
}
  

посмотрите на ссылку ActionListener здесь . как использовать эту ссылку на кнопку для прослушивания события на кнопке

Комментарии:

1. ой … ключ, помимо того факта, что ваш код неполон, в чем ваш вопрос? Однако вам все равно понадобится класс, который реализует ActionListener .

2. посмотрите на ссылку ActionListener здесь . как использовать эту ссылку на кнопку для прослушивания события на кнопке.

3. Я не знаю, о чем вы спрашиваете.

4. Вы спрашиваете о том, как добавить прослушиватель действий к кнопке? Если да, то вы ознакомились с Javadocs или каким-либо приличным руководством по Swing?

5. как прослушать событие кнопки с помощью переменной типа ActionListener?

Ответ №1:

 JButton createButton(){
    ActionListener al = new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        // run code;
      }
    };       
    JButton button = new JButton();

    button.setBounds(130, 100, 100, 40); 
    button.setText("aaa");
    button.setSize(100, 40);
    button.addActionListener(al);
    frame.add(button);

    return button;       
}
  

или

 jButton.addActionListener(new ActionListener() { 
  @Override
  public void actionPerformed(ActionEvent e) { 
    //run code;
  } 
} );
  

По сути, это точно то же самое, что использовать ActionListener для реализации содержащего класса: вы предоставляете реализацию и настраиваете свою кнопку для ее прослушивания.

Комментарии:

1. есть ли какой-либо способ, которым я могу создать свой метод createButton (), объявив ссылочные переменные или экземпляры ActionListener , ActionEvent в методе createButton() и напрямую вызвать метод actionPerformed без переопределения (полностью императивный стиль / никаких методов в методе createButton ())

2. что я понимаю: «jbutton вызвал метод addActionListener, в котором мы передаем новый экземпляр ActionListener, который имеет выполненный абстрактный метод actionPerformed, который мы должны переопределить» …. теперь, что я хочу сказать: можем ли мы использовать ActionListener здесь, не создавая новый экземпляр, но создавая ссылку. такой параметр, как ActionListener al = «Назначить здесь любой существующий тип» . и т.д. Затем дальнейшие назначения до тех пор, пока событие button не будет прослушано в любом месте, где мы хотим. означает все в выражениях императивного стиля … не переопределяющими методами.

3. что вы подразумеваете под «Назначить любой существующий тип здесь»? Если вы объявляете это как ActionListener, это должен быть ActionListener, вы не можете назначить ему строку или ArrayList . Также: что вы подразумеваете под: «все в утверждениях императивного стиля»?

4. означает, что перед объявлением ActionListener var. определенно, у нас есть что-то, что будет присвоено ActionListener, или нам нужно присвоить ActionListener чему-то уже существующему для дальнейшей работы… обязательно: объявляйте переменные, присваивайте значения или ссылку. для Var (ов) вызывайте методы api непосредственно в ref. var (ы) … в принципе, я хочу написать код, подобный неструктурированному стилю программирования / стилю do goto / упорядочивать типы напрямую, чтобы что-то делать без использования ненужного ооп…

5. … ненужный ооп? Написание кода, который вы хотите запустить, не является «излишним». Вам нужен реализованный экземпляр ActionListener для добавления в ваш JButton, как я показал в своем ответе.