Topic: 求助鼠標拖動主窗体邊緣問題

  Print this page

1.求助鼠標拖動主窗体邊緣問題 Copy to clipboard
Posted by: winterlord
Posted on: 2005-03-08 13:19

想實現鼠標拖動窗体邊緣時,最小只能到自己所設定的MinimumSize, 就像是windows下的任務管理器一樣. 是否要監聽鼠標事件? 希望大家能給些思路,謝謝!

2.Re:求助鼠標拖動主窗体邊緣問題 [Re: winterlord] Copy to clipboard
Posted by: Duncan
Posted on: 2005-03-08 14:30

winterlord wrote:
想實現鼠標拖動窗体邊緣時,最小只能到自己所設定的MinimumSize, 就像是windows下的任務管理器一樣. 是否要監聽鼠標事件? 希望大家能給些思路,謝謝!


一種方式是自己監視 frame 發出的 ComponentEvent,當接到 componentResized notification 時去檢查 frame 的 width/height 是否小於其 minimal size width/height,再適當調整 frame 的 size。這種作法沒有辦法在 user 拖曳 frame 邊框時及時地限制拖曳範圍。

另一種作法是:拿掉 frame 原來的 decoration,改用 RootPane 來裝飾,通常 LookAndFeel 提供的 RootPaneUI 在邊框被拖曳時會限制 RoorPane 的 size 被縮小到 frame minimal size 以下(frame 沒有了 decoration,frame 的 size 與 root pane 同)。請見下面這個 demo。

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JTree;

public class Trial003 {

public static void main(String[] args) {
java.awt.Toolkit.getDefaultToolkit().setDynamicLayout(true);
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frm = new JFrame("RootPane decorated frame.") {
public Dimension getMinimumSize() {
return new Dimension(300, 300);
}
};
frm.setUndecorated(true);
frm.getContentPane().add(new JTree());
frm.setSize(400, 400);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.show();
}
}

3.Re:求助鼠標拖動主窗体邊緣問題 [Re: winterlord] Copy to clipboard
Posted by: winterlord
Posted on: 2005-03-08 18:10

謝謝你的方法.
第一種方法沒有問題;但在第二種方法里會改變窗体的風格,我想用
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
改回原有風格,但是會出現標題欄不見的情況,請問如何調整?
還有在拖動時的閃爍比普通風格下的厲害,請問如何改進?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923