我正在编写一个包含三个不同面板的程序。
这是我底部面板的一部分。我使用BufferedImage显示图像,我想创建一些文本,该文本将在图像中约350px,向下约15px。我无法设法使它工作并覆盖在bufferedImage上。
我当前的代码如下(对于底部面板:
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);
}
}
根据您的需求和愿望,有几种方法可以实现这一目标。
例如,您可以直接自己绘画,而不是使用JLabel
来显示图像,...
public class BtmPanel extends JPanel {
private BufferedImage image;
BtmPanel(){
try {
image = ImageIO.read(new File("image.png"));
}
catch(IOException ie){
System.out.println("image does not exist");
}
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.drawImage(0, 0, image, this);
}
g.drawString("Y: " + MiddlePanel.y ,350,15);
}
}
这样做的原因是,您不(确实)控制图像在JLabel
内的位置(很多事情都会影响其位置)。>>
另一种解决方案是将文本直接绘制到BufferedImage
本身上。您将使用哪种格式取决于文本的动态程度以及其他一些因素
一种实现方法是与示例完全相反,重写JPanel的paint方法来绘制BufferedImage(使用图像创建背景,然后通常可以在JPanel扩展名上添加带有文本的JLabel。