bestlong 怕失憶論壇
標題:
Swing JFrame 去掉標題列後如何最小化最大化拖動視窗
[打印本頁]
作者:
bestlong
時間:
2007-11-27 14:06
標題:
Swing JFrame 去掉標題列後如何最小化最大化拖動視窗
在使用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()
歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/)
Powered by Discuz! X1.5