代码如下:
package java2;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class test02 extends JFrame{
//先定义4个按键
private JButton jbtMoveLeft=new JButton("Left");
private JButton jbtMoveRight=new JButton("Right");
private JButton jbtMoveUp=new JButton("Up");
private JButton jbtMoveDown=new JButton("Down");
private Ballcanvas canvas=new Ballcanvas();
public test02() {
// TODO 自动生成的构造函数存根
JPanel panel =new JPanel();
panel.add(jbtMoveLeft);
panel.add(jbtMoveRight);
panel.add(jbtMoveUp);
panel.add(jbtMoveDown);
//添加组件并给它位置如BorderLayout.CENTER就是中间 south是下面等等
this.add(canvas,BorderLayout.CENTER);
this.add(panel,BorderLayout.SOUTH);
//一个组件(按钮)要让它实现一些功能,比如按下怎么样就要给它添加监听器。监听器就是用来管理按下后发生的事的。监听器里写出你方法来实现
//下面的写法是匿名内部类 比如这样的格式的 jbt.addActionListener(new xxx(){});
//
jbtMoveLeft.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
canvas.moveLeft(); //调用canvas左移 因为canvas是画板,圆的改变也都是在canvas里改变的
}
});
jbtMoveRight.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
canvas.moveRight();
}
});
jbtMoveUp.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
canvas.moveUp();
}
});
jbtMoveDown.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
canvas.moveDown();
}
});
}
class Ballcanvas extends JLabel{
//定义x,y表示画图的左上角 定义半径
private int radius=30;
private int x=120;
private int y=50;
//左移函数
public void moveLeft() {
if(x>0) x-=5;
repaint(); //每次点完左移按钮时重新画图,做更正
}
public void moveRight() {
if(x<getWidth()) x+=5;
repaint();
}
public void moveUp() {
if(y>0) y-=5;
repaint();
}
public void moveDown() {
if(y<getHeight()) y+=5;
repaint();
}
protected void paintComponent(Graphics g) {
// TODO 自动生成的方法存根
super.paintComponent(g);
g.drawOval(x, y, radius, radius);
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
test02 frame=new test02(); //创建对象
frame.setSize(300, 200); //窗口大小
frame.setLocationRelativeTo(null); //窗口位置
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户单击窗口的关闭按钮时程序执行的操作
frame.setVisible(true);
}
}
运行图: