- 註冊時間
- 2006-3-13
- 最後登錄
- 2025-1-10
- 在線時間
- 673 小時
- 閱讀權限
- 200
- 積分
- 417
- 帖子
- 1107
- 精華
- 0
- UID
- 2
  
|
在使用JFrame的時候,普遍都對有標題列,還有最小化、最大化、關閉按鈕的,還要實現拖動視窗的功能。
這樣的話,對我們實現自定義樣式的視窗是很有影響的
1) 要去掉標題列:
jFrame.setUndecorated(true);
//這樣就可以去掉 JFrame 中對 Window 的裝飾了
2) 去掉標題列,我們就有可能需要自行寫程式提供最小化,最大化,關閉的操作,如何實現?
只要给按纽添加 MouseListener
在 mouseClick 中的調用
- jFrame.setExtendedState(jFrame.ICONIFIED); //最小化
- if(jFrame.getExtendedState() != jFrame.MAXIMIZED_BOTH)
- jFrame.setExtendedState(jFrame.MAXIMIZED_BOTH);
- else
- jFrame.setExtendedState(jFrame.NORMAL);
- //最大化或正常狀態
- System.exit(0);
- //關閉,退出程式
複製代碼
3) 要拖动窗体的功能:
只要给窗体中的某个组件添加如下代码就行了:
- Point loc = null;
- Point tmp = null;
- boolean isDragged = false;
- private void setDragable()
- {
- this.addMouseListener(new java.awt.event.MouseAdapter()
- {
- public void mouseReleased(java.awt.event.MouseEvent e)
- {
- isDragged = false;
- jFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
- }
- public void mousePressed(java.awt.event.MouseEvent e)
- {
- tmp = new Point(e.getX(), e.getY());
- isDragged = true;
- jFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
- }
- });
- this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter()
- {
- public void mouseDragged(java.awt.event.MouseEvent e)
- {
- if(isDragged)
- {
- loc = new Point(jFrame.getLocation().x + e.getX() - tmp.x,
- jFrame.getLocation().y + e.getY() - tmp.y);
- jFrame.setLocation(loc);
- }
- }
- });
- }
複製代碼
在初始化該组件的时候調用 setDragable() 就可以使组件具體拖放視窗的功能了。
因為可能有背景圖,可能會重寫 paint 方法,不能在 paint 方法中調用 setDragable() |
|