bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Java Swing JFrame 去掉標題列後如何最小化最大化拖動視窗 ...
查看: 6681|回復: 0
go

Swing JFrame 去掉標題列後如何最小化最大化拖動視窗 [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2007-11-27 14:06 |只看該作者 |倒序瀏覽 |打印
在使用JFrame的時候,普遍都對有標題列,還有最小化、最大化、關閉按鈕的,還要實現拖動視窗的功能。
這樣的話,對我們實現自定義樣式的視窗是很有影響的

1) 要去掉標題列:
jFrame.setUndecorated(true);
//這樣就可以去掉 JFrame 中對 Window 的裝飾了

2) 去掉標題列,我們就有可能需要自行寫程式提供最小化,最大化,關閉的操作,如何實現?
只要给按纽添加 MouseListener

在 mouseClick 中的調用
  1. jFrame.setExtendedState(jFrame.ICONIFIED); //最小化

  2. if(jFrame.getExtendedState() != jFrame.MAXIMIZED_BOTH)
  3.         jFrame.setExtendedState(jFrame.MAXIMIZED_BOTH);
  4. else
  5.         jFrame.setExtendedState(jFrame.NORMAL);
  6. //最大化或正常狀態

  7. System.exit(0);
  8. //關閉,退出程式
複製代碼


3) 要拖动窗体的功能:
只要给窗体中的某个组件添加如下代码就行了:
  1. Point loc = null;
  2. Point tmp = null;
  3. boolean isDragged = false;
  4. private void setDragable()
  5. {
  6.         this.addMouseListener(new java.awt.event.MouseAdapter()
  7.         {
  8.                 public void mouseReleased(java.awt.event.MouseEvent e)
  9.                 {
  10.                         isDragged = false;
  11.                         jFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  12.                 }
  13.                 public void mousePressed(java.awt.event.MouseEvent e)
  14.                 {
  15.                         tmp = new Point(e.getX(), e.getY());
  16.                         isDragged = true;
  17.                         jFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
  18.                 }
  19.         });
  20.         this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
  21.         {
  22.                 public void mouseDragged(java.awt.event.MouseEvent e)
  23.                 {
  24.                         if(isDragged)
  25.                         {
  26.                                 loc = new Point(jFrame.getLocation().x + e.getX() - tmp.x,
  27.                                                 jFrame.getLocation().y + e.getY() - tmp.y);
  28.                                 jFrame.setLocation(loc);
  29.                         }
  30.                 }
  31.         });
  32. }
複製代碼

在初始化該组件的时候調用 setDragable() 就可以使组件具體拖放視窗的功能了。
因為可能有背景圖,可能會重寫 paint 方法,不能在 paint 方法中調用 setDragable()
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-5-17 16:42 , Processed in 0.010650 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.