[英]Setting a JFrame without overlapping with taskbar
我需要有一個未修飾的JFrame( setUndecorated(true) ),需要全屏顯示,而不與任務欄重疊。
我嘗試了以下解決方案。
調用setExtendedState(MAXIMIZED_BOTH)。
嘗試使用JFrame.setExtendedState(MAXIMIZED_BOTH)與未修飾幀一起工作的下述解決方案?
GraphicsConfiguration config = aFrame.getGraphicsConfiguration(); Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice()); aFrame.setBounds(0, 0, usableBounds.width, usableBounds.height);
任何幫助將不勝感激。
我想到了一個設計。 但不確定其可行性。 我可以使用setBounds()。 但是,當調整任務欄或重新定位任務欄時,我需要通知我的框架。 有辦法嗎?
能夠使用以下代碼解決上述問題,
Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
setMaximizedBounds(usableBounds);
setExtendedState(MAXIMIZED_BOTH);
因此,通過getUsableBounds
我可以獲得離開任務欄的界限。 因此我使用setExtendedState(MAXIMIZED_BOTH)
,當我重新調整/重新定位任務欄時,窗口會自動更新。 :-)
final Point x = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
有一個單獨的線程來檢查任務欄是否被更改。 如果是這樣更新大小
new Thread(new Runnable() {
@Override
public void run() {
if (x.equals(GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint())) {
Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
setSize(r.getSize());
}
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.