swing创建自定义窗体界面

来源:互联网 发布:km算法 c 代码实现 编辑:程序博客网 时间:2024/05/22 08:12

转自:http://blog.csdn.net/a600423444/article/details/6737617


创建自定义外观的窗体,主要先了解以下步骤:


  • 设置窗口完全透明:AWTUtilities.setWindowOpaque(frame, false);
  • 设置窗口无边缘:frame.setUndecorated(true);
  • 设置窗口的ContentPane为要显示的Pane:frame.setContentPane(myPane);
  • 在myPane中放置具体要显示的内容,也可以重载paint方法进行Java2D绘制。这些paint会直接发生在桌面背景上。
1.主窗体文件
[java] view plaincopy
  1. package test;  
  2.   
  3. import java.awt.Graphics;  
  4.   
  5. import javax.swing.*;  
  6.   
  7. import com.sun.awt.AWTUtilities;  
  8.   
  9. public class TranslucentWindow extends JFrame{  
  10.     public TranslucentWindow() {  
  11.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  12.         setUndecorated(true);  
  13.         AWTUtilities.setWindowOpaque(thisfalse);  
  14.         setBounds(500500300300);  
  15.         JPanel pane = new JPanel() {    
  16.                 
  17.             @Override    
  18.             public void paint(Graphics g) {    
  19.                 super.paint(g);    
  20.                   
  21.                 g.drawImage(new ImageIcon("qq.png").getImage(), 00348265this);  
  22.             }    
  23.         };  
  24.           
  25.         FrameListener moveListener = new FrameListener(this);  
  26.           
  27.         addMouseListener(moveListener);  
  28.         addMouseMotionListener(moveListener);  
  29.           
  30.         setSize(348265);  
  31.         setContentPane(pane);    
  32.         setVisible(true);  
  33.     }  
  34.   
  35.     public static void main(String[] args) {  
  36.         new TranslucentWindow();  
  37.     }  
  38.   
  39. }  

因为设置了窗口无边缘,所以无法使用鼠标拖动窗体。
下面是实现自定义窗体鼠标拖动。
[java] view plaincopy
  1. package test;  
  2.   
  3. import java.awt.Point;  
  4. import java.awt.Rectangle;  
  5. import java.awt.event.MouseAdapter;  
  6. import java.awt.event.MouseEvent;  
  7.   
  8. public class FrameListener extends MouseAdapter {  
  9.     private Point lastPoint = null;  
  10.     private TranslucentWindow window = null;  
  11.       
  12.     public FrameListener(TranslucentWindow window){  
  13.         this.window = window;  
  14.     }  
  15.       
  16.     @Override  
  17.     public void mousePressed(MouseEvent e){  
  18.         lastPoint = e.getLocationOnScreen();  
  19.         System.out.println(lastPoint);  
  20.     }  
  21.       
  22.     @Override  
  23.     public void mouseDragged(MouseEvent e){  
  24.         System.out.println(e);  
  25.         Point point = e.getLocationOnScreen();  
  26.         int offsetX = point.x - lastPoint.x;  
  27.         int offsetY = point.y - lastPoint.y;  
  28.           
  29.         Rectangle bounds = window.getBounds();  
  30.         bounds.x += offsetX;  
  31.         bounds.y += offsetY;  
  32.         window.setBounds(bounds);  
  33.         lastPoint = point;  
  34.     }  
  35. }  

主要是根据鼠标点击记录坐标,当鼠标拖动结束时再次记录坐标,最后通过setBounds绝对定位窗体。

运行结果截图:


注:窗体上的功能并没有实现,仅仅是窗体的背景图是QQ登录窗口。不过根据这个窗体自定义原理,则可以做出美轮美奂的界面


0 0
原创粉丝点击