Как добавить ActionListener в JButton, добавленный в JPanel? - PullRequest
0 голосов
/ 04 июля 2011

Моя цель - сделать приложение типа рисования.

Спасибо за ваши предложения ... но в коде все еще есть ошибка.

В IDE netbeans ошибка: 'метод addActionListener вкласс не может быть применен к данным типам », встречается в строке button1.addActionListener (panel);

, поэтому я использовал его для приведения его к ActionListener.поэтому строка является button1.addActionListener ((ActionListener) панель);но все еще в приведенной ниже ошибке ' if Statement ': не удается найти переменную символа 'button1'

Еще раз спасибо за вашу помощь.здесь изменен код.я изменил имена переменных и использовал класс адаптера, чтобы сделать код проще.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class r extends JPanel
{

public int x1,x2,y1,y2;

public static double SWITCH;

public r()

{

    setBackground(Color.WHITE);

    addMouseListener(new MouseAdapter()

    {

         public void mousePressed(MouseEvent m)

         {

         x1=m.getX();

         y1=m.getY();

         repaint();

         }

         public void mouseReleased(MouseEvent m)

         {

         x1=x2=y1=y2=0;

         repaint();

         }

    });

    addMouseMotionListener(new MouseMotionAdapter()

    {

        public void mouseDragged(MouseEvent m)

        {

           x2=m.getX();

           y2=m.getY();

           repaint();

        }

    });

  }

  public void paintComponent(Graphics g)

  {

    super.paintComponent(g);

    if(SWITCH == 2)

    {

        g.drawRect(x1, y1, x2, y2);

    }

    else if (SWITCH == 3)

    {

        g.drawOval(x1,y1,x2,y2);

    }

    else

    {

        g.drawString("qwe", x1, y1);

    }

 }

 }

 public class q extends JFrame implements ActionListener
 {
 public static void main(String[] args)

 {

    q window = new q();

    window.setVisible(true);

    window.setSize(1024, 800);

    window.setDefaultCloseOperation(EXIT_ON_CLOSE);

    Container cont = window.getContentPane();

    cont.setLayout(new GridLayout(2,2));

    r panel = new r();

    JPanel BPanel = new JPanel();

    cont.add(panel);

    cont.add(BPanel);

    BPanel.setBackground(Color.blue);

    JButton button1,button2;

    button1 = new JButton("Rect");

    button2 = new JButton("Oval");

    BPanel.add(button1);

    BPanel.add(button2);

    button1.addActionListener((ActionListener) panel);

    button2.addActionListener((ActionListener) panel);

}

public void actionPerformed(ActionEvent a)

{

    Object obj;

    obj=a.getSource();

    if (obj== button1)

    {

        SWITCH = 2;

        repaint();

    }

    else

    {

       SWITCH = 3;

       repaint();

    }

}

}

1 Ответ

1 голос
/ 04 июля 2011

Я думаю, что ваши базовые концепции Java отсутствуют.

Нет ссылки "this" ни в одном статическом контексте, то есть static void main.

Замените "this" вашим экземпляром "r "," z3 ".

b1.addActionListener(z3);
b2.addActionListener(z3);

Кроме этого, ваш код пользовательского интерфейса действительно везде, но это обсуждение другого вопроса.

...