日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

swing 圆角按钮_JFrame实现圆角窗体

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 swing 圆角按钮_JFrame实现圆角窗体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在開發一個窗體程序,經常要求用圓角窗體。而在Windows 經典外觀下,直接寫出來的窗體卻是方型的。在windows 7、windows server2008 的外觀下,就已經是圓角的了。

這里我們手動實現圓角,從而與系統外觀不相關。

通過sun的內部api(包含在jdk中)來實現。這里只需調用一個方法就OK:

AWTUtilities.setWindowShape(win,

new RoundRectangle2D.Double(0.0D, 0.0D, win.getWidth(),

win.getHeight(), 6.0D, 6.0D));

其中win即為要實現圓角的窗體。

在實際顯示窗體時,發現始終還是顯示的是方角(非win7和server2008);原來JFrame在默認情況下是使用本地默認的外觀來繪制自己的外觀的。所以這里要實現方角就要禁用本地外觀。通過如下來方法設置:

JFrame.setDefaultLookAndFeelDecorated(true);

注意:該方法必須在定義窗體置前調用,否則將不起作用。

通過該方法設置后,JDK將采用跨平臺的外觀繪制窗體,從而上面設置圓角窗體的方法也起作用了。

完整代碼如下:

public class JRoundFrame extends JFrame {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

JFrame.setDefaultLookAndFeelDecorated(true);

JRoundFrame frame = new JRoundFrame();

frame.setSize(new Dimension(200, 300));

/** 設置圓角 */

AWTUtilities.setWindowShape(frame, new RoundRectangle2D.Double(

0.0D, 0.0D, frame.getWidth(), frame.getHeight(), 26.0D,

26.0D));

frame.setVisible(true);

}

});

}

}

可以看到設置后的窗體已經變為圓角了。

但是跨平臺的外觀不咋的。要實現美化外觀也能實現圓角呢。

如果不調用JFrame.setDefaultLookAndFeelDecorated(true);使用java的跨平臺外觀。

則要實現圓角,就必須得自己重寫窗體了。

如果我們不對窗體進行裝飾(調用setUndecorated(true),即不顯示窗體的邊框),這樣也能成功設置為圓角窗體。

這就只是將船體的body部分顯示為圓角了,邊框已經隱藏了。效果如下:

這樣也完美的實現了圓角邊框,只是這個窗體不能拖動,不能改變大小。所以還得自己為該窗體添加標題欄,添加按鈕實現關閉、最大化、最小化、同時監聽鼠標的拖動等功能。

當然上面的方法,只是設置了窗體的初始形狀為圓角邊框。如果要保持窗體一直為圓角(窗體的大小改變后也為圓角),則就必須實現對窗體大小改變事件的監聽。即

對窗體調用addComponentListener方法添加ComponentListener監聽。且在窗體大小改變時,同步修正窗體的形狀為圓角邊框就OK,監聽類代碼如下:

private class ComponentHandler extends ComponentAdapter {

private ComponentHandler() {

}

@Override

public void componentResized(ComponentEvent e) {

Window win = (Window) e.getSource();

Frame frame = (win instanceof Frame) ? (Frame) win : null;

if ((frame != null)

&& ((frame.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0)) {

AWTUtilities.setWindowShape(win, null);

} else {

/** 設置圓角 */

AWTUtilities.setWindowShape(win,

new RoundRectangle2D.Double(0.0D, 0.0D, win.getWidth(),

win.getHeight(), 26.0D, 26.0D));

}

}

}

總結

以上是生活随笔為你收集整理的swing 圆角按钮_JFrame实现圆角窗体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。