如何让paintComponent方法出现在屏幕上

时间:2013-10-11 16:34:43

标签: java swing jpanel call paintcomponent

我正在尝试将图片显示在JPanel上并且之前尝试过使用JLabel但是这样做没有用,所以现在我尝试使用paintComponent方法。我的代码包括创建一个带框架的窗口并向框架添加JPanel。然后在我的actionPerformed方法调用使用定时器调用repaint我没有收到System.out.println方法的输出。我能用这种方式工作吗?

public void createWindow(){

    frame.add(panel);
    frame.addComponentListener(this);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setSize(xSize, ySize);
    frame.setLocation(0, 0);

    }

@Override                 
public void paintComponent(Graphics g) {

    System.out.println("Method Called");
    super.paintComponent(g);
    g.drawString("Code has painted", 10, 100);

    }

1 个答案:

答案 0 :(得分:2)

除了您没有将this添加到JFrame之外,您的代码不向我们展示问题。对于要调用的paintComponent方法,必须将保存方法的对象添加到GUI,它必须是可见的。您的代码未显示此内容。

换句话说,改变这个:

public void createWindow(){
    frame.add(panel);  // what is panel? do you override *its* paintComponent?
    frame.addComponentListener(this);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setSize(xSize, ySize);
    frame.setLocation(0, 0);
}

到此:

public void createWindow(){
    frame.add(this);  // ******  Here you go ****
    frame.addComponentListener(this);  // Not sure what this is for
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setVisible(true);
    // frame.setSize(xSize, ySize); // *** avoid this guy
    frame.setLocation(0, 0);
}

你还说:

  

我正在尝试将图片显示在JPanel上并且之前尝试过使用JLabel但是没有用

但是使用JLabel应该可以正常工作,通常更容易实现,特别是如果图像不需要重新调整大小。考虑向我们展示此代码尝试。