java 圆角窗口_JAVA实现圆角窗体 .
现在开发一个窗体程序,经常要求用圆角窗体。而在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));
}
}
}
这样只要窗体添加了该监听,那么在窗体大小改变时,圆角边框也能跟着设置。
java 圆角窗口_JAVA实现圆角窗体 .相关推荐
- windows java 小程序_JAVA第一个窗体小程序
import java.awt.*; public class Day1015_Frame { public static void main(String[] args) { Frame frame ...
- java 操作窗口_java selenium (十二) 操作弹出窗口
public static void testMultipleWindowsTitle(WebDriver driver) throws Exception { String url="E: ...
- java小球左右_java小球碰撞窗体边缘来回反弹的代码
展开全部 没办法了 只能32313133353236313431303231363533e78988e69d8331333337393536注册一个马甲了import java.awt.*; impo ...
- java销毁窗口_java – 如何正确销毁JDialog?
我目前正在开发一个具有始终存在的主JFrame的工作应用程序.我目前有一个孩子JDialog按下按钮出现.此框架有一个JMenu,其中包含一个"退出显示"的项目.当我按下显示选项的 ...
- swing 圆角按钮_JFrame实现圆角窗体
现在开发一个窗体程序,经常要求用圆角窗体.而在Windows 经典外观下,直接写出来的窗体却是方型的.在windows 7.windows server2008 的外观下,就已经是圆角的了. 这里我们 ...
- WPF 创建无边框的圆角窗口
第一步:去掉窗体默认样式的边框 首先将窗体的背景设为透明,将允许透明的属性设置为True,即:Background="Transparent" AllowsTransparenc ...
- qt使用样式表设置窗口widget为圆角
提要 窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFra ...
- Qt 之 设置窗口边框的圆角
Qt技术学习班开始了,更多精彩.好玩的内容等着你,赶紧报名吧! 群号:655815739 Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述 ...
- java swing 关闭_Java Swing 只关闭当前窗体的实现
看到很多人都在询问怎么在java swing中只关闭当前的窗体,因此写下此文. 主界面主要是有两个jbutton,一个是通过按钮事件调起另一个jfame,另一个是关闭当前窗体. 1.关闭当前窗体不能使 ...
最新文章
- 班门弄斧?基于BCE的Lightningspin应用对比ChainBet
- Golang的模板与渲染
- 最新综述:基于Transformer的NLP预训练模型已经发展到何种程度?
- JS实现倒计时三秒钟跳转到新的页面
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄
- windows 下安装 rabbitmq报init terminating in do_boot错误
- 用Visual Studio 2019连接 WSL来编译调试C/C++项目
- micropython flask_在Python的Flask框架中实现单元测试的教程
- 我就是一根儿筋 也许问题很简单
- 【推荐实践】模型化召回在陌陌社交推荐的探索和应用.pdf(附下载链接)
- Laravel nginx 伪静态规则
- Latex参考文献引用格式,期刊参考文献引用格式注意事项
- 干货。单因素方差分析步骤梳理
- 速学TypeScript-精简划重点手册-下册
- 微信小程序—收藏功能
- ubuntu 启动 meld、diffuse失败
- 编程程软件测试学院3周年 为你破解入职大厂的终极奥秘
- 小程序源码:2022虎年全新头像框制作
- 《计算机网络》网络层之划分子网
- qconf 配置中心 php,QConf
热门文章
- 中间件 BES 连接池的配置和问题诊断方法
- POI实现EXCEL单元格合并及边框样式
- cad能整体比例缩小吗_cad调整比例(cad整体比例调整)
- 爱博精电亮相四川省节能环保品牌推广全川行——乐山站
- HTML5+CSS大作业——汽车自驾游(10页) 自驾游主题HTM5网页设计作业成品
- distrowatch(distrowatch什么意思)
- 【金猿产品展】HIO——一体化抖音电商运营投放管理平台
- unittest之TestSuite类详解
- CSDN客服联系方式(有QQ联系方式)
- 乐视max70老款_这货是电视?超大尺寸乐视TV Max70试玩