Java 从画布中单击

Java 从画布中单击,java,button,pong,java-canvas,Java,Button,Pong,Java Canvas,我正在制作一个乒乓球程序,我有一个开始按钮,可以开始画所有的东西,可以让球滚起来(欢迎你用双关语)。不管怎样,当我按下开始按钮时,除非我在画布上的某个地方单击鼠标以赋予其优先级,否则移动拨片的按键侦听器将无法工作。是否有某种代码可以在画布上自动“单击”,而不必麻烦用户这么做?提前谢谢 顺便说一下,这是awt。我意识到我应该学荡秋千,但我一直没有学会 public class Pong extends Applet implements ActionListener, KeyListener {

我正在制作一个乒乓球程序,我有一个开始按钮,可以开始画所有的东西,可以让球滚起来(欢迎你用双关语)。不管怎样,当我按下开始按钮时,除非我在画布上的某个地方单击鼠标以赋予其优先级,否则移动拨片的按键侦听器将无法工作。是否有某种代码可以在画布上自动“单击”,而不必麻烦用户这么做?提前谢谢

顺便说一下,这是awt。我意识到我应该学荡秋千,但我一直没有学会

public class Pong extends Applet implements ActionListener, KeyListener
{
    Canvas c1;
    Graphics myG;
    Button start;

    ball ball;
    paddle LPaddle;
    paddle RPaddle;

    public void init()
    {
        this.setSize(1300,700);

        c1 = new Canvas();
        add(c1);
        c1.addKeyListener(this);
        c1.setBackground(Color.pink);

        start = new Button("Start");
        add(start);
        start.addActionListener(this);


        ball = new ball();

        LPaddle = new paddle();
        RPaddle = new paddle();

        myG = c1.getGraphics();


    }

    public void paint(Graphics g)
    {
        c1.setLocation(0,0);
        c1.setSize(1251,700);

        start.setLocation(1255,350);
        start.setSize(40,20);
    }


    public void keyPressed(KeyEvent e) 
    {
        if(e.getKeyCode()==KeyEvent.VK_UP)//up
        {
            RPaddle.erasePaddle(myG);
            RPaddle.movePaddleUp();
            RPaddle.drawPaddle(myG);
        }
        if(e.getKeyCode()==KeyEvent.VK_DOWN)//down
        {
            RPaddle.erasePaddle(myG);
            RPaddle.movePaddleDown();
            RPaddle.drawPaddle(myG);
        }
        if(e.getKeyCode()==KeyEvent.VK_W)
        {
            LPaddle.erasePaddle(myG);
            LPaddle.movePaddleUp();
            LPaddle.drawPaddle(myG);
        }
        if(e.getKeyCode()==KeyEvent.VK_S)
        {
            LPaddle.erasePaddle(myG);
            LPaddle.movePaddleDown();
            LPaddle.drawPaddle(myG);
        }
        if(e.getKeyCode()==KeyEvent.VK_ENTER)
        {
            myG.drawLine(625,0,625,700);
            LPaddle.setInitial(150,0,350);
            RPaddle.setInitial(150,1250,350);

            LPaddle.drawPaddle(myG);
            RPaddle.drawPaddle(myG);
        }
    }

    public void keyReleased(KeyEvent e) 
    {

    }

    public void keyTyped(KeyEvent e) 
    {

    }



    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource()==start)
        {
            myG.drawLine(625,0,625,700);
            LPaddle.setInitial(150,0,350);
            RPaddle.setInitial(150,1250,350);

            LPaddle.drawPaddle(myG);
            RPaddle.drawPaddle(myG);
        }
    }

keylisters
是低级别的接口,它有一个主要的、重要的回退:它们注册到的组件必须是可聚焦的并且是聚焦的

单击“开始”按钮,即为按钮提供焦点

您可以在画布实例上调用
requestFocusInWindow
,但这首先假定画布的对象是可聚焦的


如果可以,最好使用
JComponent
/
JPanel
作为游戏画布的基础,并使用API。

请发布少量代码来说明您的问题。您必须使用AWT还是可以使用Swing?