图像不会出现在keyPressed Java上

时间:2013-05-31 15:23:52

标签: java graphics paintcomponent keyevent

我在JPanel的图形上下文中绘制图像。但是,当我按下S时,图像不会从图形上下文中删除。我知道我的keyListeners正在工作。

如果我处理图形上下文,图形上下文中的内容是否应该消失?

public class MainMenu extends JPanel implements KeyListener {

    private JFrame frame;
    private int width = 660;
    private int height = 500;
    private Image image;
    private boolean removeImage = false;

    public MainMenu()
    {
        frame = new JFrame();
        frame.setResizable(false);
        frame.setTitle("Menu Test");
        setBackground(Color.BLACK);
        frame.setSize(width,height);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // add main menu to the frame
        frame.add(this);
        // let the frame know about keyevents from this class
        frame.addKeyListener(this);

    }

    public void setup()
    {
        frame.setVisible(true);

    }



    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        if(e.getKeyCode() == KeyEvent.VK_S)
        {

            removeImage = true;

        }

        repaint();
    }



    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        try {
            image = ImageIO.read(new File("Game/menuScreen.PNG"));

            g.drawImage(image, 0, 0, null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

        if(removeImage)
        {
            g.dispose();
        }

    }

1 个答案:

答案 0 :(得分:2)

调用Graphics#dispose不会删除JPanel

中的图片
if (removeImage) {
   g.dispose();
}

而是使用boolean标志来指示是否应该绘制图像

if (showImage) {
   g.drawImage(image, 0, 0, this);
}

将标记更新为false并调用repaint以有效“清除”之前的所有图像。

showImage = false;
repaint();

注意:

  • 无需为dispose中的Graphics个对象调用paintComponents。这仅适用于自定义Graphics引用。
  • 不要从paintComponent加载图片 - 这会降低性能。从启动时的方法加载图像
  • 开发Swing应用程序时,请使用Key Bindings而不是KeyListeners。后者使用需要重点工作的KeyEventsKey Bindings使用KeyStrokes,无论重点如何,都可以正常工作。