用swing开发项目时遇到很多问题,之前也没怎么做过swing的项目,遇到的问题也许很低级,但是都得自己一点一点去解决。
问题(一):设置swing窗体的背景图片的问题,开始以为跟C#中winform是一样的直接设置Background image就可以了,其实不然,网上查了一查如何设置窗体背景的问题,最后我经过自己的实践觉得还是用自定义一个JPanel组件来解决没用JLable组件太过去局限。这里我提出我重写后的JPanel的代码。在设置窗体的背景的时候,将这个类添加到JFrame中,并将此JPanel的宽和高都设置为窗体的高和宽就好了,如果需要在JPanel里面作业,则需要在JPanel里面添加布局。
package com.wxyztech.control; import java.awt.Graphics; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JPanel; @SuppressWarnings("serial") public class MImagePanel extends JPanel { private ImageIcon imageIcon = null; public ImageIcon getImageIcon() { return imageIcon; } public void setImageIcon(URL imgUrl) { imageIcon = new ImageIcon(imgUrl); } public MImagePanel() { } //构造方法,当我们在实例化JPanel的时候,直接加上背景图片的URL就可以实现背景的效果 public MImagePanel(URL imgUrl){ imageIcon = new ImageIcon(imgUrl); } @Override protected void paintComponent(Graphics g) { // TODO 自动生成的方法存根 int x = 0, y = 0; //java.net.URL imgURL = getClass().getResource("/bg/bg_default.png"); //ImageIcon icon = new ImageIcon(imgURL); g.drawImage(imageIcon.getImage(), x, y, getSize().width, getSize().height, this); super.paintComponent(g); } }
在引用的时候下面几行代码就可以了
URL url = getClass().getResource("/bg/bg_PKing.png"); panel = new MImagePanel(url); panel.setBounds(0, 0, frameWidth, frameHeight); panel.setOpaque(false);// 设置当前panel为透明的 getContentPane().add(panel); panel.setLayout(null);