JAVA下GUI设置透明背景图片窗口(不覆盖文本内容)

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

一、最终效果图:

最终效果图

二、源码

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:)…

记录时间 2020年7月6日 08:34

  • 17
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值