如何给这个日志记录器 添加背景图片
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 生成】
没有问题,我明白了。
【相关推荐】