代码如下:
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); } }运行图: