做了一个Swing不规则界面 但是这个上面却没法添加按钮和其他组件
大家帮我看一下
package StuManage_View; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; import java.awt.image.PixelGrabber; import java.io.IOException; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JWindow; import com.sun.awt.AWTUtilities; public class Login_ui extends JWindow{ private static final long serialVersionUID = 1L; private Image img; JPanel jp1,jp2,jp3; JTextField jt1,jt2; JButton jb1,jb2; public Login_ui() { //用来设定窗体不规则样式的图片 super(); jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(); jt1=new JTextField(); jt2=new JTextField(); jb1=new JButton(); jb2=new JButton(); MediaTracker mt=new MediaTracker(this); try { img=ImageIO.read(Login_ui.class.getResource("c1.png")); } catch (IOException e1) { e1.printStackTrace(); } mt.addImage(img, 0); try { mt.waitForAll(); } catch (InterruptedException e) { e.printStackTrace(); } try { initialize();//窗体初始化 } catch (IOException e) { e.printStackTrace(); } } private void initialize() throws IOException { this.setSize(img.getWidth(null), img.getHeight(null)); // this.setUndecorated(true); this.setLayout(new BorderLayout()); this.add(jp1,"South"); this.setAlwaysOnTop(true); AWTUtilities.setWindowShape(this,getImageShape(img)); // AWTUtilities.setWindowOpacity(this, 1f); this.setLocationRelativeTo(null); } public Shape getImageShape(Image img) { ArrayList<Integer> x=new ArrayList<Integer>(); ArrayList<Integer> y=new ArrayList<Integer>(); int width=img.getWidth(null);//图像宽度 int height=img.getHeight(null);//图像高度 PixelGrabber pgr = new PixelGrabber(img, 0, 0, -1, -1, true); try { pgr.grabPixels(); //传递像素 } catch (InterruptedException ex) { ex.getStackTrace(); } int pixels[] = (int[]) pgr.getPixels(); for (int i = 0; i < pixels.length; i++) { int alpha = getAlpha(pixels[i]); if (alpha != 0){ x.add(i%width>0 ? i%width-1:0); y.add(i%width==0 ? (i==0 ? 0:i/width-1):i/width); } } int[][] matrix=new int[height][width]; for(int c=0;c<x.size();c++){ matrix[y.get(c)][x.get(c)]=1; } Area rec=new Area(); int temp=0; for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ if(matrix[i][j]==1){ if(temp==0) temp=j; else if(j==width){ if(temp==0){ Rectangle rectemp=new Rectangle(j,i,1,1); rec.add(new Area(rectemp)); }else{ Rectangle rectemp=new Rectangle(temp,i,j-temp,1); rec.add(new Area(rectemp)); temp=0; } } }else{ if(temp!=0){ Rectangle rectemp=new Rectangle(temp,i,j-temp,1); rec.add(new Area(rectemp)); temp=0; } } } temp=0; } return rec; } private int getAlpha(int pixel) { return (pixel >> 24)& 0xff; } @Override public void paint(Graphics g) { super.paint(g); g.drawImage(img, 0, 0, null); g.fillRect(737, 360, jp1.getWidth(), jp1.getHeight()); } public static void main(String []args) { Login_ui l=new Login_ui(); l.setVisible(true); } }