我正在尝试将图片显示在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);
}
答案 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应该可以正常工作,通常更容易实现,特别是如果图像不需要重新调整大小。考虑向我们展示此代码尝试。