Проблема с ActionListener

У меня возникли проблемы с реализацией ActionListener. В моем классе addbutton это не позволит мне использовать ActionListener. То, что я пытаюсь сделать, это отобразить два JFrame и нажать кнопку в качестве кнопки. У меня все остальное работает, ожидая нажатия кнопки. Кнопка появляется, но нажатие на нее ничего не делает, поэтому я добавляю ActionListener, и он не определен для моего метода. Что я делаю не так и что я могу сделать, чтобы это исправить. Спасибо.

import java.awt.event.ActionEvent;

import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;

@SuppressWarnings("serial")
public class PictureTest extends JFrame {


public static class addbutton extends JFrame implements ActionListener{

    public addbutton()  { 

        JFrame button = new JFrame();
        JButton take = new JButton("Take Please");
        button.add(take);
        add(take);
        button.addActionListener(this); //This line is the issue
    }
    public void actionPerformed(ActionEvent e) {
        e.getSource();
        System.out.println("Here");

    }
}



public PictureTest() {
    ImageIcon image = new ImageIcon("c:/Vending/pepsi.jpg");
    JLabel label = new JLabel(image);
    JPanel soda = new JPanel();
    soda.add(label);
    add(soda);
}

        public static void main(String[] args)  {
        PictureTest frame = new PictureTest();
        addbutton button = new addbutton();
        frame.setSize(250, 450);
        frame.setTitle("Pepsi");
        frame.setLocation(200, 100);
        frame.setUndecorated(true);
        button.setSize(105, 25);
        button.setLocation(275, 550);
        button.setUndecorated(true);
        button.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        button.setVisible(true);
        }
}

person user2785463    schedule 16.09.2013    source источник


Ответы (1)


Не добавляйте одну и ту же кнопку к обоим JFrame. Добавьте слушателя к кнопке.

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

    JButton take = new JButton("Take Please");
    button.add(take);
    take.addActionListener(this); // listen to the button

    JButton take2 = new JButton("Take Please");
    add(take2);
    take2.addActionListener(this); // also listen to the other button

Кроме того, по соглашению все классы Java имеют имена, начинающиеся с заглавной буквы. Если вы будете следовать этому правилу и привыкнете к нему сами, другим будет легче читать ваш код. А ты их.

Возможно, вы могли бы избежать этой ошибки, изменив способ именования компонентов.

Обычно переменной с именем «кнопка» присваивается объект JButton, а не JFrame, который обычно называется, в данном случае что-то вроде «otherFrame», указывающее, что это кадр, и есть еще один, который также находится в игре в это время.

Другой способ сделать это - использовать анонимный внутренний класс для прослушивания, но вы не можете легко заставить его прослушивать две кнопки таким образом. Итак, если в одном JFrame была только одна кнопка:

    JButton take = new JButton("Take Please");
    button.add(take);
    take.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        e.getSource();
        System.out.println("Here");
      }
    });
person Lee Meador    schedule 16.09.2013