简体   繁体   English

如何将 ActionListener 添加到添加到 JPanel 的 JButton?

[英]How to add ActionListener to a JButton added to a JPanel?

My aim is to make a paint type application.我的目标是制作油漆类型的应用程序。

Thank you for your suggestions.. but there is still error in the code.感谢您的建议.. 但是代码中仍然存在错误。

In netbeans IDE error: 'method addActionListener in class cannot be applied to given types' occurs in the line button1.addActionListener(panel);在 netbeans IDE 错误:'方法 addActionListener in class 不能应用于给定类型'(出现在 button1.panel.panel 行中);

so i used it suggestion to cast it to ActionListener.所以我用它建议将它转换为 ActionListener。 so the line is button1.addActionListener((ActionListener) panel);所以这一行是 button1.addActionListener((ActionListener) panel); but still in the below ' if statement ' error occurs: cannot find symbol variable 'button1'但仍然在下面的“ if 语句”中发生错误:找不到符号变量“button1”

Thanks again for your help.再次感谢你的帮助。 here is changed code.这是更改的代码。 i changed the variable names and used adapter class to make code simpler.我更改了变量名并使用了适配器 class 来简化代码。

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();

    }

}

}

I think your basic Java concepts are lacking.我认为您缺乏基本的 Java 概念。

There is no "this" reference in any static context, ie static void main.在任何 static 上下文中都没有“this”引用,即 static void main。

Replace "this" with your instance of "r", "z3".将“this”替换为“r”、“z3”的实例。

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

Other than that, your UI code is really all over the place, but that's a discussion for another question.除此之外,您的 UI 代码确实到处都是,但这是另一个问题的讨论。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM