конфликт со статическими классами actionListener - PullRequest
0 голосов
/ 13 ноября 2010

Я ищу какую-то ориентацию. Я хочу кнопку для питания материала, который окрашен в графическом контенте. Я раньше использовал кнопки с jframes и слушателями. Но почему-то слушатель не принимается. Я уверен, что это связано с двумя объявленными классами. Кто-нибудь может сказать мне, в чем проблема или конфликт?

Я не могу использовать //f.addWindowListener(this); //b.addActionListener(this); Это отмечает ошибку, поэтому они пишутся как комментарии ... = S

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

/* implements ActionListener*/
class JFramePaint1 extends JFrame implements ActionListener {

    public static int activa = 0;
    public static JButton b = new JButton("b");

    public static void main(String[] a) {

        JFrame f = new JFrame();
        f.setTitle("Drawing Graphics in Frames");
        f.setSize(800, 650);
        f.setLocation(200, 50);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setContentPane(new ContentComponent());
        f.getContentPane().add(b);

        //f.addWindowListener(this);
        //b.addActionListener(this);

        f.setVisible(true);
    }

    static class ContentComponent extends JPanel {

        public void paint(Graphics g) {
            g.setColor(Color.RED);
            g.fillRect(0, 40, 800, 650);
            if (activa == 1) {

                g.setColor(Color.BLACK);
                g.drawRect(40, 40, 150, 80);
                int x = 40;
                int y = 40;
                for (int i = 0; i < 4; i++) {

                    g.drawRect(x + 10, y + 10, 150, 80);
                    x = x + 10;
                    y = y + 10;
                }
            }
        }//del paint
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == b) {
            System.out.println("entro");
        }
    }

    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }

    public void windowOpened(WindowEvent e) {}

    public void windowClosed(WindowEvent e) {}

    public void windowActivated(WindowEvent e) {}

    public void windowDeactivated(WindowEvent e) {}

    public void windowIconified(WindowEvent e) {}

    public void windowDeiconified(WindowEvent e) {}
}

Ответы [ 2 ]

2 голосов
/ 13 ноября 2010

Вы не можете использовать

  //f.addWindowListener(this);
  //b.addActionListener(this);

потому что вы находитесь в статическом методе. На что вы ожидаете this указать?

1 голос
/ 13 ноября 2010

Возможно, вам будет проще переместить весь код, который есть в main (), в конструктор. Кстати, я также не знаю, почему вы расширяете JFrame, но также создаете новый экземпляр JFrame в своем основном методе. Я думаю, что вы хотите что-то подобное (я не проверял, но это общая идея).

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

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

/* implements ActionListener*/
class JFramePaint1 extends JFrame implements ActionListener {

    private int activa = 0;
    private JButton b = new JButton("b");

    JFramePaint1() {
        setTitle("Drawing Graphics in Frames");
        setSize(800, 650);
        setLocation(200, 50);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setContentPane(new ContentComponent());
        getContentPane().add(b);

        addWindowListener(this);
        addActionListener(this);
    }

    public static void main(String[] a) {
      new JFramePaint1().setVisible(true);
    }

    class ContentComponent extends JPanel {

        public void paint(Graphics g) {
            g.setColor(Color.RED);
            g.fillRect(0, 40, 800, 650);
            if (activa == 1) {

                g.setColor(Color.BLACK);
                g.drawRect(40, 40, 150, 80);
                int x = 40;
                int y = 40;
                for (int i = 0; i < 4; i++) {

                    g.drawRect(x + 10, y + 10, 150, 80);
                    x = x + 10;
                    y = y + 10;
                }
            }
        }//del paint
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == b) {
            System.out.println("entro");
        }
    }

    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }

    public void windowOpened(WindowEvent e) {}

    public void windowClosed(WindowEvent e) {}

    public void windowActivated(WindowEvent e) {}

    public void windowDeactivated(WindowEvent e) {}

    public void windowIconified(WindowEvent e) {}

    public void windowDeiconified(WindowEvent e) {}
}
...