如何给java类日志记录器添加背景图片

如何给这个日志记录器 添加背景图片

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

public class LoggingUI extends Container {
    private final Font font = new Font(Font.MONOSPACED, Font.PLAIN, 22);
    private final Color fontColor = new Color(22, 198, 12);
    private final Color bgColor = new Color(0, 0, 0);
    private final ArrayList rows = new ArrayList();
    private static LoggingUI instance = null;

    private LoggingUI() {
    }

    public static LoggingUI getInstance() {
    if(instance == null) {
        instance = new LoggingUI();
    }

    return instance;
    }

    public void paint(Graphics g) {
    g.setFont(font);
    g.setColor(bgColor);
    g.fillRect(20, 20, getWidth() - 40, getHeight() - 40);
    g.setColor(fontColor);

    for(int i=0; i<rows.size(); i++) {
        String row = (String)rows.get(i);
        int len = g.getFontMetrics().stringWidth(row);
        g.drawString(row, 30, 40 + (i*25));
    }
    }

    public void log(String msg) {
    StringBuffer sb = new StringBuffer();

    int col = 0;
    for(int i=0; i<msg.length(); i++) {
        char ch = msg.charAt(i);

        switch(ch) {
        case '\t':
        sb.append("    ");
        col += 4;
        break;

        case '\n':
        rows.add(sb.toString());
        sb = new StringBuffer();
        col = 0;
        break;

        default:
        sb.append(ch);
        col++;
        break;
        }

        if(col >= 180) {
        rows.add(sb.toString());
        sb = new StringBuffer();
        col = 0;
        }
    }

    if(sb.length() > 0) {
        rows.add(sb.toString());
    }

    while(rows.size() > 44) {
        rows.remove(0);
    }

    repaint();
    }

    public void log(Throwable t) {
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);

    t.printStackTrace(pw);
    log(sw.toString());
    }

    public void log(Object obj) {
    log(obj.toString());
    }
}


引用 皆我百晓生 小程序回复内容作答:
要给这个日志记录器添加背景图片,你可以在paint方法中使用g.drawImage方法来绘制图片。以下是一个示例代码:

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.imageio.ImageIO;

public class LoggingUI extends Container {
    private final Font font = new Font(Font.MONOSPACED, Font.PLAIN, 22);
    private final Color fontColor = new Color(22, 198, 12);
    private final ArrayList<String> rows = new ArrayList<>();
    private static LoggingUI instance = null;
    private Image backgroundImage;

    private LoggingUI() {
        try {
            backgroundImage = ImageIO.read(getClass().getResource("background.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static LoggingUI getInstance() {
        if (instance == null) {
            instance = new LoggingUI();
        }
        return instance;
    }

    public void paint(Graphics g) {
        g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), null);
        g.setFont(font);
        g.setColor(fontColor);
        for(int i = 0; i < rows.size(); i++) {
            String row = rows.get(i);
            g.drawString(row, 30, 40 + (i * 25));
        }
    }

    public void log(String msg) {
        // ...
    }

    public void log(Throwable t) {
        // ...
    }

    public void log(Object obj) {
        // ...
    }
}

在上面的代码中,我添加了一个成员变量backgroundImage来保存背景图片,并在构造方法中使用ImageIO.read方法从文件中加载图片。然后,在paint方法中使用g.drawImage方法将背景图片绘制到容器中。

请注意,你需要将background.png替换为你想要使用的实际背景图片的文件名,并确保该图片文件在编译后的类路径下。

【以下回答由 GPT 生成】

没有问题,我明白了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^