触发按钮改变panel面板上的小圆圈颜色

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

public class TouChaCol implements ActionListener{
    JFrame frame;
    public static void main(String [] args){
        TouChaCol game = new TouChaCol();
        game.go();
    }
    
    public void go(){
        frame = new JFrame();
        JButton button = new JButton("Can you touch me?");
        button.addActionListener(this);
        Panel aPanel = new Panel();
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(BorderLayout.SOUTH,button);
        frame.getContentPane().add(BorderLayout.CENTER,aPanel);
        
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent event){
        frame.repaint();
    }

}
View class TouChaCol

查询java api文档:

ActionEvent 类 来自java.awt.event

JFrame,JButton 类来自javax.swing

接口 ActioListener来自java.awt.event

BorderLayout 类 来自java.awt 用法:BorderLayout.SOUTH/CENTER...详见文档

import javax.swing.*;
import java.awt.*;
public class Panel extends JPanel{
    public void paintComponent(Graphics g){
        int red = (int)(Math.random() * 255);
        int green = (int)(Math.random() * 255);
        int blue = (int)(Math.random() * 255);
        Color myColor = new Color(red,green,blue);
        g.setColor(myColor);
        g.fillOval(70,70, 100, 100);
    }
}
View class Panel

让Panel继承JPanel,覆盖它的paintComponent(Graphics g)方法则可以按照自己的意思画图

整体思想:

建一个类TouChaCol

分别建1个 JFrame ,Panel(继承过JPanel)和 button的对象

再将后两者的对象放到JFrame对象上,将button的监听者设为TouChaCol的对象(该对象即为ActionListener)

所以要在该对象的类中实现接口ActionListener中的actionPerformed(ActionEvent e)方法作为事件处理方法(e即为button被按了一下)

特意将frame设为实例变量,不用是不行的,原因是actionPerformed必须得存取frame对象

原文地址:https://www.cnblogs.com/gabygoole/p/4910126.html