在面板上的缓冲图像上绘制文本

问题描述 投票:0回答:2

我正在编写一个包含三个不同面板的程序。

这是我底部面板的一部分。我使用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);
    }
}

java swing text label awt
2个回答
1
投票

根据您的需求和愿望,有几种方法可以实现这一目标。

例如,您可以直接自己绘画,而不是使用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本身上。您将使用哪种格式取决于文本的动态程度以及其他一些因素


-1
投票

一种实现方法是与示例完全相反,重写JPanel的paint方法来绘制BufferedImage(使用图像创建背景,然后通常可以在JPanel扩展名上添加带有文本的JLabel。

© www.soinside.com 2019 - 2024. All rights reserved.