无法将keyListener添加到JFrame

时间:2018-12-07 17:34:44

标签: java swing compiler-errors jpanel keylistener

我一直遇到这个非常烦人的问题,无法找到为什么发生这种情况的解释,但是在搜索了45分钟之后,Stackoverflow是我的最后选择。下面的代码是发生了什么。

//inside of initComponents();

//jPanel1 is a JPanel
jPanel1 = new Panel(); // Panel extends JPanel
addKeyListener(jPanel1.new InputListener()); // InputListener implements keyListener
// ^^^ "cannot find symbol 'InputListener' "

老实说,我对正在发生的事情一无所知,但是如果有人可以帮助我,那真是太棒了。

窗口类:

public class MainWindow extends javax.swing.JFrame {

/**
 * Creates new form MainWindow
 */
public MainWindow() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jPanel1 = new Panel();
    addKeyListener(jPanel1.new InputListener());

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 725, Short.MAX_VALUE)
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 601, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(0, 0, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(0, 0, Short.MAX_VALUE))
    );

    jPanel1.getAccessibleContext().setAccessibleDescription("");

    pack();
}// </editor-fold>                        

// Variables declaration - do not modify                     
javax.swing.JPanel jPanel1;
// End of variables declaration                   
}

面板类:

public class Panel extends JPanel{
Timer t;

Guy guy;
public Panel(){
    guy = new Guy(400, 300);
    t = new Timer(20, new UpdateListener());
    t.start();

}

class InputListener implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        guy.vx = 100;
        guy.vy = 100;
    }

    @Override
    public void keyReleased(KeyEvent e) {
        guy.vx = 0;
        guy.vy = 0;
    }

}

class UpdateListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        guy.update(.02);
        repaint();
    }

}

@Override
public void paint(Graphics g){
    super.paint(g);
    guy.draw(g);

}

}

0 个答案:

没有答案