首页 > 技术文章 > 拖动去掉边框的JFrame

haichun 2013-12-29 14:11 原文

似乎业界的程序员都不喜欢用java来开发图形界面,但是因为跨平台的原因,对java的桌面编程非常的感兴趣,想使用它做出一套漂亮的图形界面。

此篇文章主要介绍,java下通过swing实现win8的磁力铁

原理:继承java的swing组件,对其进行功能的扩展

java swing界面的jframe中重生之大文豪,通过setUndecorated(true)方法可以去掉周围的边框,后果是我们没法拖动这个窗口了;以下代码提供了一种方式来解决这个问题:

 

  1. public class ShowMain{  
  2.     public static void main(String[] args) {  
  3.         MyFrame frame = new MyFrame();  
  4.     }  
  5. }  
  6. class MyFrame extends JFrame implements MouseListener,MouseMotionListener{  
  7.     JFrame frame;  
  8.     Container container;  
  9.     int x;  
  10.     int y;  
  11.     int tempX;  
  12.     int tempY;  
  13.     int winX;  
  14.     int winY;  
  15.     int oldX;  
  16.     int oldY;  
  17.       
  18.     public MyFrame() {  
  19.         init();  
  20.     }  
  21.       
  22.     public void init(){               
  23.         frame = this;  
  24.         container = frame.getContentPane();  
  25.         frame.setBounds(300300300300);  
  26.         container.setBackground(Color.BLUE);  
  27.         frame.setUndecorated(true);  
  28.         frame.setVisible(true);  
  29.         frame.addMouseListener(this);  
  30.         frame.addMouseMotionListener(this);  
  31.     }  
  32.   
  33.     @Override  
  34.     public void mouseDragged(MouseEvent e) {  
  35.         Point point = e.getPoint();  
  36.         Rectangle rec = frame.getBounds();  
  37.                   
  38.         winX = (int)rec.getX();  
  39.         winY = (int)rec.getY();       
  40.         x = (int)point.getX();  
  41.         y = (int)point.getY();        
  42.         tempX = x - oldX;  
  43.         tempY = y - oldY;         
  44.           
  45.         frame.setLocation((int)(winX + tempX), (int)(winY + tempY));      
  46.     }  
  47.       
  48.     @Override  
  49.     public void mousePressed(MouseEvent e) {  
  50.         Rectangle rec = frame.getBounds();  
  51.         Point point = e.getPoint();       
  52.         tempX = (int)point.getX();  
  53.         tempY = (int)point.getY();  
  54.         oldX = (int)point.getX();  
  55.         oldY = (int)point.getY();     
  56.     }  
  57.     @Override  
  58.     public void mouseClicked(MouseEvent e) {  
  59.         // TODO Auto-generated method stub        
  60.     }  
  61.     @Override  
  62.     public void mouseEntered(MouseEvent e) {  
  63.         // TODO Auto-generated method stub        
  64.     }  
  65.     @Override  
  66.     public void mouseExited(MouseEvent e) {  
  67.         // TODO Auto-generated method stub        
  68.     }  
  69.     @Override  
  70.     public void mouseReleased(MouseEvent e) {  
  71.         // TODO Auto-generated method stub        
  72.     }  
  73.     @Override  
  74.     public void mouseMoved(MouseEvent e) {  
  75.         // TODO Auto-generated method stub        
  76.     }     
  77. }  

运行截图(通过鼠标可以拖动一下的方块窗体):

 


推荐阅读