JAVA Swing不规则

    技术2022-05-20  37

    做了一个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);           }     }

     


    最新回复(0)