之前学过Java的GUI,写过简单的例子。昨天朋友问怎么能为窗口设置背景图片,且让文字在背景上边显示,挺简单的要求折腾了好一会儿才实现…mark一下。

一、最终效果图:

java中图片作为背景 java背景图片不覆盖文字_JAVA 图形用户界面设计 源代码

二、源码

public class Client extends JFrame {
   private JTextField enter;
   private JTextArea display;

   public Client()
   {
      //设置背景图
      ImageIcon icon=new ImageIcon("src\\images\\bcg.jpg");//背景图
      JLabel label = new JLabel(icon);//往一个标签中加入图片
      label.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight());//设置标签位置大小为图片大小
      this.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE));//标签添加到第二层面板
      
      //获取顶层容器设为透明
      JPanel imPanel = (JPanel)getContentPane();
      imPanel.setOpaque(false);
      
      //建立透明文本显示区面板    
      JPanel displayPanel=new JPanel();
      displayPanel.setOpaque(false);
      //建立透明的JTextArea以显示输出内容
      display = new JTextArea(10,10);
      display.setText("Connnect Attmpting...");
      display.setOpaque(false);
      //JTextArea加入文本显示面板
      displayPanel.add(display);
      //文本显示面板加至顶层容器
      imPanel.add(displayPanel,BorderLayout.WEST);
      
      //设置透明文本输入区面板
      JPanel enterPanel=new JPanel();
      enterPanel.setOpaque(false);
      //文本输入标签
      JLabel enterLab = new JLabel("Client Input:");
      //设置透明可写的文本输入框
      enter = new JTextField(20);
      enter.setOpaque(false);
      enter.setEnabled(true);
      enter.addActionListener(
         new ActionListener() {
            public void actionPerformed( ActionEvent e )
            {//添加事件监听动作
            }
         }
      );
      enterPanel.add(enterLab);
      enterPanel.add(enter);
      //文本输入面板加至顶层容器
      imPanel.add(enterPanel,BorderLayout.SOUTH);
      
      //设置窗口为图片大小且不可调整     
      setSize(icon.getIconWidth(),icon.getIconHeight());
      setResizable(false);
      //设置窗口可见
      setVisible(true);
   }


   public static void main( String args[] )
   {
      Client app = new Client();
      app.addWindowListener(
         new WindowAdapter() {
            public void windowClosing( WindowEvent e )
            {
               System.exit( 0 );
            }
         }
      );
   }


}

三、总结

  1. 图片标签一定要加入到窗口的第二层面板,且把顶层面板设为透明。
  2. 输入框、文本域等小组件都要先放到一个透明JPanel下,然后再加入到顶层面板。
  3. GUI是真的笨重…写过B/S后真的不想再碰C/S hhhh:)…