程序不是听KeyBindings或paintComponent()

时间:2016-01-20 20:49:56

标签: java swing graphics paintcomponent key-bindings

我有一个程序,每次点击空格键时都会发射子弹。程序有两个问题:它不会调用paintComponent()或者监听我的KeyBindings。这是我的代码:

line[X]

1 个答案:

答案 0 :(得分:2)

让我们来看看你的主要方法:

public static void main(String[] args) {
    // Set the frame up
    frame = new JFrame();
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setVisible(true);

    // Get some more necessary objects
    s1 = new Ship();
    shoot = new Shoot();

    // Threads
    Thread ship = new Thread(s1);
    ship.start();
}

您创建了一个新的Shoot对象 - 但是哪里你放了它?不在任何显示的JFrame中。要使键绑定起作用并使paintComponent工作,绑定和绘图组件必须是显示的GUI的一部分 - 然后将其添加到GUI中。

例如,考虑:

public static void main(String[] args) {
    // Set the frame up
    frame = new JFrame();
    frame.setSize(400, 300);  // ** you really don't want to do this
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);

    // Get some more necessary objects
    s1 = new Ship();
    shoot = new Shoot();

    frame.add(shoot);  // ** added to GUI
    frame.setVisible(true);  // ** display GUI **after** addition

另外,根据camickr的评论 - 不要忘记在绘图组件的任何时候改变状态,以改变其绘图的方式调用repaint()