Java 如何禁止我的精灵对象在画布的特定坐标上移动

Java 如何禁止我的精灵对象在画布的特定坐标上移动,java,Java,我想禁止我的Sprite对象在画布的特定坐标上移动。我该怎么做?我到目前为止所做的: 一揽子计划1 import java.awt.*; //使用AWT的图形和颜色 导入java.awt.event.*; //使用AWT的事件类和侦听器 接口导入javax.swing.*; //使用Swing的组件和容器 /** *自定义图形示例:使用键/按钮向左或向右移动对象。 *移动对象(精灵)在其自己的类中定义,并具有自己的 *操作并可自行绘制。* */雪碧{ //变量(包访问) 公共int x; 公

我想禁止我的
Sprite
对象在画布的特定坐标上移动。我该怎么做?我到目前为止所做的:

  • 一揽子计划1
    import java.awt.*;
    //使用AWT的图形和颜色
    导入java.awt.event.*;
    //使用AWT的事件类和侦听器
    接口导入javax.swing.*;
    //使用Swing的组件和容器
    /**  
    *自定义图形示例:使用键/按钮向左或向右移动对象。
    *移动对象(精灵)在其自己的类中定义,并具有自己的
    *操作并可自行绘制。*
    */雪碧{
    //变量(包访问)
    公共int x;
    公共智力;
    int宽度、高度;
    //使用矩形进行说明
    Color Color=Color.RED;//对象的颜色
    //建造师
    公共精灵(整数x、整数y、整数宽度、整数高度、颜色){
    这个.x=x;
    这个。y=y;
    这个。宽度=宽度;
    高度=高度;
    这个颜色=颜色;
    }
    //在给定图形上下文的情况下绘制自身
    公共空间涂料(图g){
    g、 设置颜色(颜色);
    g、 fillRect(x,y,宽度,高度);//填充矩形
    //g.抽绳(20,0,20,240);
    System.out.println(“绘制X:+X+”Y:+Y”);
    //System.out.println(“绘制第二个X:+X+“Y:+Y”);}
    公共类Project1扩展了JFrame{
    //为各种尺寸定义常量
    公共静态最终整型画布宽度=400;
    公共静态最终内部画布高度=240;
    公共静态最终颜色画布\u BG\u Color=Color.CYAN;
    私人帆布;
    //自定义绘图画布(内部类扩展了JPanel)
    private Sprite Sprite;//移动的对象
    //构造函数来设置GUI组件和事件处理程序
    公共项目1(){
    //构造一个给定x,y,宽度,高度,颜色的精灵
    int x=0,y=0;
    精灵=新精灵(画布宽度/2-30,画布高度/2-30,
    10,10,颜色。红色);
    //为按钮设置面板
    JPanel btnPanel=newjpanel(newflowlayout());
    JButton btnLeft=新JButton(“向左移动”);
    btnPanel.add(btnLeft);
    btnLeft.addActionListener(新ActionListener(){
    @凌驾
    已执行的公共无效操作(操作事件evt){
    左移();
    requestFocus();//将焦点更改为JFrame以接收KeyEvent
    }
    });
    //JPanel btnPanel1=新的JPanel(新的FlowLayout());
    JButton btnDown=新JButton(“下移”);
    btnPanel.add(btnDown);
    addActionListener(新ActionListener(){
    @凌驾
    已执行的公共无效操作(操作事件evt){
    向下移动();
    requestFocus();//将焦点更改为JFrame以接收KeyEvent
    }
    });
    JButton btnRight=新JButton(“向右移动”);
    btnPanel.add(btnRight);
    addActionListener(新的ActionListener(){
    @凌驾
    已执行的公共无效操作(操作事件evt){
    moveRight();
    requestFocus();//将焦点更改为JFrame以接收KeyEvent
    }
    });
    JButton btnUp=新JButton(“上移”);
    btnPanel.add(btnUp);
    addActionListener(新的ActionListener(){
    @凌驾
    已执行的公共无效操作(操作事件evt){
    moveUp();
    requestFocus();//将焦点更改为JFrame以接收KeyEvent
    }
    });
    //设置自定义绘图画布(JPanel)
    画布=新的DrawCanvas();
    setPreferredSize(新维度(画布宽度、画布高度));
    //将两个面板添加到此框架
    容器cp=getContentPane();
    cp.setLayout(新的BorderLayout());
    cp.add(画布,BorderLayout.CENTER);
    cp.add(btnPanel,BorderLayout.SOUTH);
    //“超级”JFrame触发KeyEvent
    addKeyListener(新的KeyAdapter(){
    @凌驾
    按下公共无效键(KeyEvent evt){
    开关(evt.getKeyCode()){
    case KeyEvent.VK_LEFT:moveLeft();break;
    case KeyEvent.VK_RIGHT:moveRight();break;
    case KeyEvent.VK_DOWN:moveDown();break;
    case KeyEvent.VK_UP:moveUp();break;
    }
    }
    });
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setTitle(“移动精灵”);
    pack();//打包JFrame中的所有组件
    setVisible(true);//显示它
    requestFocus();/“super”JFrame请求focus接收KeyEvent}
    //将精灵向左移动的助手方法私有void moveLeft(){
    //保存当前尺寸以便重新绘制以擦除精灵
    int savedX=sprite.x;
    //更新精灵
    sprite.x-=10;
    //为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
    canvas.repaint(savedX,sprite.y,sprite.width,sprite.height);//将旧区域清除为背景
    canvas.repaint(sprite.x,sprite.y,sprite.width,sprite.height);//绘制新位置}
    //用于将精灵向右移动的助手方法私有void moveRight(){
    //保存当前尺寸以便重新绘制以擦除精灵
    int savedX=sprite.x;
    //更新精灵
    sprite.x+=10;
    //为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
    canvas.repaint(savedX,sprite.y,sprite.width,sprite.height);//将旧区域清除为背景
    canvas.repaint(sprite.x,sprite.y,sprite.width,sprite.height);//在新位置绘制}
    私有无效向下移动(){
    //保存当前尺寸以便重新绘制以擦除精灵
    int saved=sprite.y;
    //更新精灵
    雪碧y+=10;
    //为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
    canvas.repaint(sprite.x,已保存,sprite.width,sprite.height);//将旧区域清除为背景
    画布.重绘(sprite.x,sprite.y,sprite.width,spri