【发布时间】:2019-12-11 20:12:13
【问题描述】:
我正在编写一个由三个不同面板组成的程序。
这是我底部面板的一部分。我使用 BufferedImage 显示图像,我想创建一些文本,这些文本将出现在图像中 350 像素左右,向下 15 像素。我无法让它工作并覆盖在缓冲图像上。
我当前的代码如下(对于底部面板):
public class BtmPanel extends JPanel {
BtmPanel(){
try {
JLabel imgLabel = new JLabel();
final BufferedImage img = ImageIO.read(new File("image.png"));
ImageIcon icon = new ImageIcon(img);
imgLabel.setIcon(icon);
this.add(imgLabel);
}
catch(IOException ie){
System.out.println("image does not exist");
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Y: " + MiddlePanel.y ,350,15);
}
}
【问题讨论】:
-
要了解为什么您的代码不起作用,请阅读 A Closer Look at the Painting Mechanism 上的 Swing 教程中的部分。问题是标签被绘制在面板顶部,因此它会覆盖面板的自定义绘制。您可以扩展 JLabel 来进行自定义绘画。另外,为什么要使用幻数? 350 和 15 有什么关系。可能还有其他选项,例如将 JLabel 添加到 JLable 并使用布局管理器来定位文本。