现在开发一个窗体程序,经常要求用圆角窗体。而在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实现圆角窗体 .相关推荐

  1. windows java 小程序_JAVA第一个窗体小程序

    import java.awt.*; public class Day1015_Frame { public static void main(String[] args) { Frame frame ...

  2. java 操作窗口_java selenium (十二) 操作弹出窗口

    public static void testMultipleWindowsTitle(WebDriver driver) throws Exception { String url="E: ...

  3. java小球左右_java小球碰撞窗体边缘来回反弹的代码

    展开全部 没办法了 只能32313133353236313431303231363533e78988e69d8331333337393536注册一个马甲了import java.awt.*; impo ...

  4. java销毁窗口_java – 如何正确销毁JDialog?

    我目前正在开发一个具有始终存在的主JFrame的工作应用程序.我目前有一个孩子JDialog按下按钮出现.此框架有一个JMenu,其中包含一个"退出显示"的项目.当我按下显示选项的 ...

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

    现在开发一个窗体程序,经常要求用圆角窗体.而在Windows 经典外观下,直接写出来的窗体却是方型的.在windows 7.windows server2008 的外观下,就已经是圆角的了. 这里我们 ...

  6. WPF 创建无边框的圆角窗口

    第一步:去掉窗体默认样式的边框 首先将窗体的背景设为透明,将允许透明的属性设置为True,即:Background="Transparent"  AllowsTransparenc ...

  7. qt使用样式表设置窗口widget为圆角

    提要 窗口widget是无法直接通过样式表设置为圆角的,需要在窗口QWidget中拖入控件QFrame,将QFrame设置的和窗口QWidget一样大小,将窗口QWidget中需要的控件拖入到QFra ...

  8. Qt 之 设置窗口边框的圆角

    Qt技术学习班开始了,更多精彩.好玩的内容等着你,赶紧报名吧! 群号:655815739 Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述 ...

  9. java swing 关闭_Java Swing 只关闭当前窗体的实现

    看到很多人都在询问怎么在java swing中只关闭当前的窗体,因此写下此文. 主界面主要是有两个jbutton,一个是通过按钮事件调起另一个jfame,另一个是关闭当前窗体. 1.关闭当前窗体不能使 ...

最新文章

  1. 班门弄斧?基于BCE的Lightningspin应用对比ChainBet
  2. Golang的模板与渲染
  3. 最新综述:基于Transformer的NLP预训练模型已经发展到何种程度?
  4. JS实现倒计时三秒钟跳转到新的页面
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄
  6. windows 下安装 rabbitmq报init terminating in do_boot错误
  7. 用Visual Studio 2019连接 WSL来编译调试C/C++项目
  8. micropython flask_在Python的Flask框架中实现单元测试的教程
  9. 我就是一根儿筋 也许问题很简单
  10. 【推荐实践】模型化召回在陌陌社交推荐的探索和应用.pdf(附下载链接)
  11. Laravel nginx 伪静态规则
  12. Latex参考文献引用格式,期刊参考文献引用格式注意事项
  13. 干货。单因素方差分析步骤梳理
  14. 速学TypeScript-精简划重点手册-下册
  15. 微信小程序—收藏功能
  16. ubuntu 启动 meld、diffuse失败
  17. 编程程软件测试学院3周年 为你破解入职大厂的终极奥秘
  18. 小程序源码:2022虎年全新头像框制作
  19. 《计算机网络》网络层之划分子网
  20. qconf 配置中心 php,QConf

热门文章

  1. 中间件 BES 连接池的配置和问题诊断方法
  2. POI实现EXCEL单元格合并及边框样式
  3. cad能整体比例缩小吗_cad调整比例(cad整体比例调整)
  4. 爱博精电亮相四川省节能环保品牌推广全川行——乐山站
  5. HTML5+CSS大作业——汽车自驾游(10页) 自驾游主题HTM5网页设计作业成品
  6. distrowatch(distrowatch什么意思)
  7. 【金猿产品展】HIO——一体化抖音电商运营投放管理平台
  8. unittest之TestSuite类详解
  9. CSDN客服联系方式(有QQ联系方式)
  10. 乐视max70老款_这货是电视?超大尺寸乐视TV Max70试玩