• Swing使用Substance外观包异常问题


    问题一: 今天更新我的Java版QQ,在网上找到了Substance外观包,效果不错,直接用了,可是设置水印问题时就出现问题,网上有现成的例子

    JFrame.setDefaultLookAndFeelDecorated(true);  
    JDialog.setDefaultLookAndFeelDecorated(true);
    try
    {
    SubstanceImageWatermark watermark  =   new  SubstanceImageWatermark(LoginFrame. class .getResourceAsStream( " /demo/001.jpg " ));
    watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE);
    SubstanceSkin skin = new OfficeBlue2007Skin().withWatermark(watermark); //初始化有水印的皮肤
    UIManager.setLookAndFeel( new SubstanceOfficeBlue2007LookAndFeel());
    SubstanceLookAndFeel.setSkin(skin); //设置皮肤

    } catch (UnsupportedLookAndFeelException ex) {
    Logger.getLogger(LoginFrame. class .getName()).log(Level.SEVERE,  null , ex); 
    }

     可是在我导入的包里死活包withWatermark方法不存在,于是就Google,最后看到一哥们说,自从subtance6.0以后就去掉了 withWatermark设置水印方法,原因貌似是不安全,可是想用水印的效果呢?那你就换成substance5.0版本吧!换了之后果然能用了效果图:北京比较淡,水印不明显。

    问题二:使用subtance出现异常UIDefaults.getUI() failed: 和org.jvnet.substance.api.UiThreadingViolationException,有一前辈说是包不能识别啥的,就我遇到的问题,只是换了皮肤之后框架布局变了,不在于能不能用的问题,关键还是在代码上,我遇到的这个问题就在于我的代码设置问题,先把我的部分代码贴出来分析一下:

    SubstanceImageWatermark watermark = new SubstanceImageWatermark(UserMainView.class.getResourceAsStream("/client/images/backImages/2.jpg "));              
    watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE);              
    SubstanceSkin skin = new OfficeBlue2007Skin() .withWatermark(watermark); // 初始化有水印的皮肤               
    UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());              
    SubstanceLookAndFeel.setSkin(skin); // 设置皮肤

    这是一个类,时刻要记得UIManager设置前提,放在构造方法的最前面,调用时要用到Swing工作线程 SwingUtilities.invokeLater()来调用,我在LoginView中调用的方法:

    1 //userMainView = new UserMainView(oos, ois, v); // 加载用户信息SwingUtilities.invokeLater(new Runnable() { 
    2 public void run() {       
    3 userMainView = new UserMainView(oos, ois, v); // 加载用户信息   userMainView.setVisible(true);        
    4 }        });       
    5 LoginView.this.setVisible(false);<br>}

    没有少量一句,SwingUtilities.invokeLater(new Runnable()}这是Swing工作形式,我的最后出来结果了,和以前系统默认的就是大小比例的不同,不再抛出异常,我认为是代码的问题,这是今天的收获写出来大家分享一下。

    这是转自别人的,感谢他解决我的问题。

  • 相关阅读:
    appium常见问题03_appium脚本报错selenium.common.exceptions.WebDriverException
    如何保存android app日志
    appium常见问题02_android内嵌H5页(webview)如何定位
    appium常见问题01_android筛选下拉框无法定位问题
    数字类型
    计算机基础
    HTML5学习笔记
    spring boot-hello world
    C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))
    C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/5616149.html
Copyright © 2020-2023  润新知