我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。
以下是变量声明:
static KeyListener listen; public static int slide = 0;
这是主要的KeyListener声明:
listen = new KeyListener() { public void keyPressed(KeyEvent arg0) { if(arg0.getKeyCode() == KeyEvent.VK_LEFT && slide>0) { slide--; System.out.println("Left pressed. Slide is " + slide); } else if(arg0.getKeyCode() == KeyEvent.VK_RIGHT) { slide++; System.out.println("Right pressed. Slide is " + slide); } } public void keyReleased(KeyEvent arg0) {} public void keyTyped(KeyEvent arg0) {} };
这是用于绘画的方法:
public void paintComponent(Graphics g){ super.paintComponent(g); this.setBackground(new Color(0, 0, 20)); g.drawImage(exitButton, 20, 20, null); drawBoard(g); } public void drawBoard(Graphics g){ if(slide == 0) { String[] text0 = {"This is the test", "for the Presenter application", "Here is a nicely framed picture of the Berlin Wall." }; makeTextBox(text0); g.drawImage(textBox, textX, textY,(boxW)*2,(boxH)*2, null); g.setColor(Color.blue); g.fillRect(wallX-10, wallY-10, wallW+20, wallH+20); g.drawImage(wall, wallX, wallY, null); } else if(slide == 1) { String[] text1 = {"Here is the second page...", "Welcome."}; makeTextBox(text1); g.drawImage(textBox, textX, textY,(boxW)*2,(boxH)*2, null); } }
当我运行该程序时,该程序会打印if(slide == 0)外壳,但是当我按箭头键时,屏幕上没有任何变化。
if(slide == 0)
您需要先将关键侦听器添加到组件,然后才能调用它:
addKeyListener(new KeyListener() { /* ... methods as before ... */ });
您还需要使组件具有焦点并使其具有焦点:
setFocusable(true); requestFocusInWindow();
最后,如果要在按下键时重绘屏幕,则必须repaint()在按键处理程序中调用组件的方法。
repaint()