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对象