Java方法未实现

Java方法未实现,java,swing,graphics,Java,Swing,Graphics,我创建了一个小Java程序,基本上可以在JFrame中绘制一个键盘控制的圆圈和一些“墙”。下面是它执行时的样子 该计划分为3类: main.java(主方法类) Infout.java(圆圈+墙构造函数类) world.java(绘制JFrame的类) 代码如下: main.java public class main { public static void main(String[] args) { world w = new world(); Infout o =

我创建了一个小Java程序,基本上可以在JFrame中绘制一个键盘控制的圆圈和一些“墙”。下面是它执行时的样子

该计划分为3类:

  • main.java(主方法类)
  • Infout.java(圆圈+墙构造函数类)
  • world.java(绘制JFrame的类)
  • 代码如下:

    main.java

     public class main {
    
    public static void main(String[] args) {
    
        world w = new world();
        Infout o = new Infout();
    
        w.frame();
    
    }
    
       }
    
     import javax.swing.JFrame;
    
    
      public class world {
    
    JFrame f = new JFrame();
    Infout o = new Infout();
    
    public void frame(){
        f.setVisible(true);
        f.setDefaultCloseOperation(3);
        f.setSize(300, 400);
        f.setTitle("Circle");
        f.add(o);
    
    }
       }
    
     import javax.swing.*;
    
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.geom.*;
    
    public class Infout extends JPanel implements ActionListener, KeyListener {
    
        Timer t = new Timer(5, this);
        double x = 0, y = 0, velx = 0, vely = 0;
    
        public Infout(){
    
            t.start();
            addKeyListener(this);
            setFocusable(true);
            setFocusTraversalKeysEnabled(false);
    
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.fill(new Ellipse2D.Double(x, y, 40, 40));
            g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
            g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
            g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
            g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
            g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
            g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
            if (x >= 120 && y >= 270) {
                g.drawString("You win!",115,35);
            }
            if (x <= 120 && y >= 270) {
                g.drawString("You lose!",115,35);
            }
            if (x == 120 && y >= 270){
                velx = 0;
                vely = 0;
            }
            if (x == 31.5 && y <= 200 && y >= 100){
                velx = 0;
            }
            if (x == 132 && y <= 170 && y >= 100){
                velx = 0;
            }
            if (x <= 190 && x >= 120 && y == 42){
                velx = 0;
            }
            if (x <= 210 && x >= 171 && y == 192){
                velx = 0;
            }
    
        }
    
    
        public void actionPerformed(ActionEvent e) {
    
            System.out.println("x "+x+"y "+y);
    
            repaint();
            x += velx;
            y += vely;
    
            if (x < 0 || x > 260)
            {
                velx = 0;
                vely = 0;
            }
            if (y < 0 || y > 340)
            {
                velx = 0;
                vely = 0;
            }
        }
    
        public void up() {
            vely = -1.5;
            velx = 0;
        }
    
        public void down() {
            vely = 1.5;
            velx = 0;
        }
    
        public void left() {
            velx = -1.5;
            vely = 0;
        }
    
        public void right() {
            velx = 1.5;
            vely = 0;
        }
    
        public void keyPressed(KeyEvent e) {
            int code = e.getKeyCode();
            if (code == KeyEvent.VK_UP) {
                up();
            }
            if (code == KeyEvent.VK_DOWN) {
                down();
            }
            if (code == KeyEvent.VK_RIGHT) {
                right();
            }
            if (code == KeyEvent.VK_LEFT) {
                left();
            }
    
        }
    
        public void keyTyped(KeyEvent e) {}
        public void keyReleased(KeyEvent e) {}
         }
    
    world.java

     public class main {
    
    public static void main(String[] args) {
    
        world w = new world();
        Infout o = new Infout();
    
        w.frame();
    
    }
    
       }
    
     import javax.swing.JFrame;
    
    
      public class world {
    
    JFrame f = new JFrame();
    Infout o = new Infout();
    
    public void frame(){
        f.setVisible(true);
        f.setDefaultCloseOperation(3);
        f.setSize(300, 400);
        f.setTitle("Circle");
        f.add(o);
    
    }
       }
    
     import javax.swing.*;
    
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.geom.*;
    
    public class Infout extends JPanel implements ActionListener, KeyListener {
    
        Timer t = new Timer(5, this);
        double x = 0, y = 0, velx = 0, vely = 0;
    
        public Infout(){
    
            t.start();
            addKeyListener(this);
            setFocusable(true);
            setFocusTraversalKeysEnabled(false);
    
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.fill(new Ellipse2D.Double(x, y, 40, 40));
            g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
            g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
            g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
            g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
            g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
            g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
            if (x >= 120 && y >= 270) {
                g.drawString("You win!",115,35);
            }
            if (x <= 120 && y >= 270) {
                g.drawString("You lose!",115,35);
            }
            if (x == 120 && y >= 270){
                velx = 0;
                vely = 0;
            }
            if (x == 31.5 && y <= 200 && y >= 100){
                velx = 0;
            }
            if (x == 132 && y <= 170 && y >= 100){
                velx = 0;
            }
            if (x <= 190 && x >= 120 && y == 42){
                velx = 0;
            }
            if (x <= 210 && x >= 171 && y == 192){
                velx = 0;
            }
    
        }
    
    
        public void actionPerformed(ActionEvent e) {
    
            System.out.println("x "+x+"y "+y);
    
            repaint();
            x += velx;
            y += vely;
    
            if (x < 0 || x > 260)
            {
                velx = 0;
                vely = 0;
            }
            if (y < 0 || y > 340)
            {
                velx = 0;
                vely = 0;
            }
        }
    
        public void up() {
            vely = -1.5;
            velx = 0;
        }
    
        public void down() {
            vely = 1.5;
            velx = 0;
        }
    
        public void left() {
            velx = -1.5;
            vely = 0;
        }
    
        public void right() {
            velx = 1.5;
            vely = 0;
        }
    
        public void keyPressed(KeyEvent e) {
            int code = e.getKeyCode();
            if (code == KeyEvent.VK_UP) {
                up();
            }
            if (code == KeyEvent.VK_DOWN) {
                down();
            }
            if (code == KeyEvent.VK_RIGHT) {
                right();
            }
            if (code == KeyEvent.VK_LEFT) {
                left();
            }
    
        }
    
        public void keyTyped(KeyEvent e) {}
        public void keyReleased(KeyEvent e) {}
         }
    
    Infout.java

     public class main {
    
    public static void main(String[] args) {
    
        world w = new world();
        Infout o = new Infout();
    
        w.frame();
    
    }
    
       }
    
     import javax.swing.JFrame;
    
    
      public class world {
    
    JFrame f = new JFrame();
    Infout o = new Infout();
    
    public void frame(){
        f.setVisible(true);
        f.setDefaultCloseOperation(3);
        f.setSize(300, 400);
        f.setTitle("Circle");
        f.add(o);
    
    }
       }
    
     import javax.swing.*;
    
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.geom.*;
    
    public class Infout extends JPanel implements ActionListener, KeyListener {
    
        Timer t = new Timer(5, this);
        double x = 0, y = 0, velx = 0, vely = 0;
    
        public Infout(){
    
            t.start();
            addKeyListener(this);
            setFocusable(true);
            setFocusTraversalKeysEnabled(false);
    
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.fill(new Ellipse2D.Double(x, y, 40, 40));
            g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
            g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
            g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
            g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
            g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
            g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
            if (x >= 120 && y >= 270) {
                g.drawString("You win!",115,35);
            }
            if (x <= 120 && y >= 270) {
                g.drawString("You lose!",115,35);
            }
            if (x == 120 && y >= 270){
                velx = 0;
                vely = 0;
            }
            if (x == 31.5 && y <= 200 && y >= 100){
                velx = 0;
            }
            if (x == 132 && y <= 170 && y >= 100){
                velx = 0;
            }
            if (x <= 190 && x >= 120 && y == 42){
                velx = 0;
            }
            if (x <= 210 && x >= 171 && y == 192){
                velx = 0;
            }
    
        }
    
    
        public void actionPerformed(ActionEvent e) {
    
            System.out.println("x "+x+"y "+y);
    
            repaint();
            x += velx;
            y += vely;
    
            if (x < 0 || x > 260)
            {
                velx = 0;
                vely = 0;
            }
            if (y < 0 || y > 340)
            {
                velx = 0;
                vely = 0;
            }
        }
    
        public void up() {
            vely = -1.5;
            velx = 0;
        }
    
        public void down() {
            vely = 1.5;
            velx = 0;
        }
    
        public void left() {
            velx = -1.5;
            vely = 0;
        }
    
        public void right() {
            velx = 1.5;
            vely = 0;
        }
    
        public void keyPressed(KeyEvent e) {
            int code = e.getKeyCode();
            if (code == KeyEvent.VK_UP) {
                up();
            }
            if (code == KeyEvent.VK_DOWN) {
                down();
            }
            if (code == KeyEvent.VK_RIGHT) {
                right();
            }
            if (code == KeyEvent.VK_LEFT) {
                left();
            }
    
        }
    
        public void keyTyped(KeyEvent e) {}
        public void keyReleased(KeyEvent e) {}
         }
    
    import javax.swing.*;
    导入java.awt.*;
    导入java.awt.event.*;
    导入java.awt.geom.*;
    公共类Infout扩展JPanel实现ActionListener、KeyListener{
    定时器t=新定时器(5,此);
    双x=0,y=0,velx=0,vely=0;
    公共资讯{
    t、 start();
    addKeyListener(此);
    设置聚焦(真);
    setFocusTraversalKeysEnabled(false);
    试一试{
    睡眠(100);
    }捕捉(中断异常e){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }
    }
    公共组件(图形g){
    超级组件(g);
    图形2d g2=(图形2d)g;
    g2.填充(新椭圆E2D.双(x,y,40,40));
    g2.填充(新矩形2D.双(0,270,300,5));
    g2.填充(新矩形2D.双(140270,5300));
    g2.填充(新矩形2D.双(140,60,70,5));
    g2.填充(新矩形2D.双(50,140,5,70));
    g2.填充(新矩形2D.双(150、130、5、40));
    g2.填充(新矩形2D.双(190、210、40、5));
    如果(x>=120&&y>=270){
    g、 抽绳(“你赢了!”,115,35);
    }
    如果(x=270){
    g、 抽绳(“你输了!”,115,35);
    }
    如果(x==120&&y>=270){
    velx=0;
    f=0;
    }
    如果(x==31.5&&y=100){
    velx=0;
    }
    如果(x==132&&y=100){
    velx=0;
    }
    如果(x=120&&y=42){
    velx=0;
    }
    如果(x=171&&y=192){
    velx=0;
    }
    }
    已执行的公共无效操作(操作事件e){
    系统输出打印项次(“x”+x+“y”+y);
    重新油漆();
    x+=velx;
    y+=0;
    如果(x<0 | | x>260)
    {
    velx=0;
    f=0;
    }
    如果(y<0 | | y>340)
    {
    velx=0;
    f=0;
    }
    }
    公开作废{
    vely=-1.5;
    velx=0;
    }
    公众假期{
    Vly=1.5;
    velx=0;
    }
    公共空间(左){
    velx=-1.5;
    f=0;
    }
    公共无效权(){
    velx=1.5;
    f=0;
    }
    按下公共无效键(按键事件e){
    int code=e.getKeyCode();
    if(code==KeyEvent.VK_UP){
    up();
    }
    if(code==KeyEvent.VK_DOWN){
    向下();
    }
    if(code==KeyEvent.VK_RIGHT){
    对();
    }
    if(code==KeyEvent.VK_左){
    左();
    }
    }
    public void keyTyped(KeyEvent e){}
    public void keyReleased(KeyEvent e){}
    }
    
    问题是,当我尝试用键盘键移动圆时,圆没有移动!:(Infout.java中的所有代码都是正确的,因为我使用的这个类是另一个程序,并且我能够移动圆圈:/

    谢谢


    Ab

    您正在调用
    actionPerformed
    方法吗


    如果没有,则面板可能没有重新绘制本身

    首先调试您的代码并确保调用了关键侦听器…尝试了解您的代码添加
    repaint()时会发生什么
    在你的
    按键
    方法中执行了所有
    if
    语句之后?该类没有问题。我认为它与主方法有关。我应该在哪里调用actionPerformed方法?嗯,你应该将其注册到组件中。无论如何,我不会在在像您这样的应用程序中,您可能会有一个无限循环,不时地重新绘制面板。屏幕可能会闪烁,但这是另一个主题的另一个问题