在JTextArea中显示一个图片背景,使用本方法画出的背景图片将会随着滚动条而移动位置,适合信签等应用。
如果需要背景图片始终不动,可以在一个JPanel上画好背景图形,然后将滚动组件和文本组件放上来(滚动和文本都需要设置背景透明),这样就可以看到下面的背景图片了,而且不会因为滚动而移动位置。
一、背景随滚动而移动位置:
import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * 在JTextArea中显示一个图片背景(背景随滚动而移动位置) * * @author 五斗米 <如转载请保留作者和出处> * @blog http://blog.csdn.net/mq612 */ public class Test extends JFrame { private static final long serialVersionUID = 4785452373598819719L; private JScrollPane sp = null; private JTextArea text = null; private ImageIcon imageIcon = null; public Test() { super("JTextArea"); imageIcon = new ImageIcon("photo.jpg"); text = new JTextArea() { private static final long serialVersionUID = -8220994963464909915L; { setOpaque(false); // 设置透明 } protected void paintComponent(Graphics g) { g.drawImage(imageIcon.getImage(), 0, 0, this); super.paintComponent(g); } }; sp = new JScrollPane(text); this.getContentPane().add(sp); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 260); this.setVisible(true); } public static void main(String args[]) { new Test(); } } |
二、背景不随滚动而移动位置:
import java.awt.BorderLayout; import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * 在JTextArea中显示一个图片背景(背景不随滚动而移动位置) * * @author 五斗米 <如转载请保留作者和出处> * @blog http://blog.csdn.net/mq612 */ public class Test extends JFrame { private static final long serialVersionUID = 4785452373598819719L; private JScrollPane sp = null; private JTextArea text = null; private ImageIcon imageIcon = null; public Test() { super("JTextArea"); imageIcon = new ImageIcon("photo.jpg"); // 构造文本组件并使之透明 text = new JTextArea(); text.setOpaque(false); // 构造滚动组件并使之透明 sp = new JScrollPane(text); sp.setOpaque(false); sp.getViewport().setOpaque(false); // 构造一个背景JPanel JPanel backdrop = new JPanel() { private static final long serialVersionUID = 1957203784117943458L; { this.setOpaque(false); this.setLayout(new BorderLayout()); } public void paintComponent(Graphics g) { g.drawImage(imageIcon.getImage(), 0, 0, this); super.paintComponents(g); } }; // 将滚动组件加入 backdrop.add(sp); // 将背景组件加入窗体 this.getContentPane().add(backdrop); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(360, 260); this.setVisible(true); } public static void main(String args[]) { new Test(); } } |