我有问题。我需要使用JTextArea
创建一个GUI,在其中我想设置一个背景图像。我创建了一个扩展JTextArea
的类,并重写了paintComponent
方法以插入图像。
图像现在可见但是当我调用setText
方法时,文本隐藏在图像后面。怎么解决呢?
答案 0 :(得分:1)
我们可以通过设置自定义用户界面来完成此操作:
static void decorate(JTextArea a, final BufferedImage img) {
a.setUI(new javax.swing.plaf.basic.BasicTextAreaUI() {
@Override
protected void paintBackground(Graphics g) {
g.drawImage(img, 0, 0, null);
}
});
a.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
a.setForeground(Color.white);
a.setCaretColor(Color.lightGray);
}
请参阅BasicTextUI#paintBackground
。
(来自here的图片。)
答案 1 :(得分:0)
尝试在扩展JTextArea的类的构造函数中调用setOpaque(false)。将opaque设置为true会导致显示JTextArea的颜色背景和文本。
package demo;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class BackgroundDemo extends JFrame{
public BackgroundDemo() {
initUI();
}
public void initUI() {
MyTextArea area = new MyTextArea();
add(area);
area.setText("Demo Text");
pack();
setSize(400, 400);
}
public static void main(String[] args) {
BackgroundDemo demo = new BackgroundDemo();
demo.setVisible(true);
}
}
class MyTextArea extends JTextArea {
public MyTextArea() {
setOpaque(false);
setVisible(true);
setPreferredSize(new Dimension(400, 400));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
try {
BufferedImage image = ImageIO.read(BackgroundDemo.class.getResource("/demo/background.png"));
g.drawImage(image, 0, 0, this);
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}