Как добавить несколько ActionListeners для нескольких кнопок в Java Swing - PullRequest
4 голосов
/ 06 мая 2011

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

Пример:

protected JButton x;

x = new JButton("add");
x.addActionListener(this);

public void actionPerformed(ActionEvent evt) { //code.....}

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

Ответы [ 6 ]

11 голосов
/ 06 мая 2011

А как же:

    JButton addButton = new JButton( new AbstractAction("add") {
        @Override
        public void actionPerformed( ActionEvent e ) {
            // add Action
        }
    });

    JButton substractButton = new JButton( new AbstractAction("substract") { 
        @Override
        public void actionPerformed( ActionEvent e ) {
            // substract Action
        }
    });
7 голосов
/ 06 мая 2011

Используйте внутренние классы:

x = new JButton("add"); 
x.addActionListener(
  new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      //your code here
    }
  }
);
5 голосов
/ 06 мая 2011

Вы можете использовать ActionEvent.getSource(), чтобы определить источник и действовать соответственно, или вы можете определить разные ActionListeners для каждого из них.

2 голосов
/ 26 июля 2017

как насчет ...

protected JButton x, z, a, b,c;

x = new JButton("add x");
z = new JButton("add z");
a = new JButton("add a");
b = new JButton("add b");
c = new JButton("add c");
x.addActionListener(this);
z.addActionListener(this);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);

тогда

public void actionPerformed(ActionEvent evt)
{
     if (evt.getSource()==x)
         {
            //do something
         }
     else if (evt.getSource()==z)
         {
            //do something
         }
     else if (evt.getSource()==a)
         {
            //do something
         }
     else if (evt.getSource()==b)
         {
            //do something
         }
     else if (evt.getSource()==c)
         {
            //do something
         }
}

это всегда работает для меня, но, честно говоря, я не уверен, что это не плохая практика

1 голос
/ 06 мая 2011

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

x.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e)
    { ... }
});

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

1 голос
/ 06 мая 2011

Вам просто нужно каждый раз создавать новый экземпляр ActionListener.Кстати, по многим причинам рекомендуется использовать Action вместо.

Вот хороший ресурс, который также объясняет, почему вы должны использовать действия над ActionListeners, руководство по Java под названием Как использоватьДействия

РЕДАКТИРОВАТЬ : @fmucar прав, вы можете сделать все это в одном ActionListener.Хотя наличие отдельных функциональных действий позволяет использовать их независимо друг от друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...