【发布时间】:2013-10-11 16:34:42
【问题描述】:
我正在尝试让图片出现在 JPanel 上,并且之前尝试过使用 JLabels,但没有成功,所以现在我正在尝试使用 paintComponent 方法。我的代码包括制作一个带有框架的窗口并将 JPanel 添加到框架中。然后在使用计时器调用 repaint 调用的 actionPerformed 方法中,我没有收到 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);
}
【问题讨论】:
-
have previously tried using JLabels but that didn't work- JLabel 是 Swing 中最简单的组件。没有理由不能将 ImageIcon 与 JLabel 一起使用。在进行自定义绘画之前,您应该先学习如何做到这一点。不要重新发明轮子!!!事实上,我在 3 周前向您展示了如何做到这一点:stackoverflow.com/a/18927663/131872。 Swing 教程也有大量示例。 -
并且请在最后拨打
frame.setVisible(true)之类的电话,一旦所有组件都添加到容器中,并且容器已经完全实现了它的大小。 -
我没有做 JLabels 的原因是因为它不允许我调整大小或重新定位任何标签
-
@CurtisFloras:布局管理器通常会为您处理这个问题,除非您还讨论调整图像大小。
-
@CurtisFloras,
it wouldn't let me resize or relocate any labels我再次在您的帖子中为您提供了解决方案:stackoverflow.com/q/19170601/131872。您不应该管理组件的位置,这是布局管理器的工作。还有其他解决方案。例如,您可以将 EmptyBorder 添加到 JLabel 以确定图标在标签中的位置。
标签: java swing jpanel call paintcomponent