java swing开发中的substance设置lookFeel问题

Kyunchen 2015-01-28 12:16:24

package com.substance.test;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.border.StandardBorderPainter;
import org.jvnet.substance.button.StandardButtonShaper;
import org.jvnet.substance.skin.CremeSkin;
import org.jvnet.substance.watermark.SubstanceBubblesWatermark;

public class SubsTest {

/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu();
menu.setText("Substance Test");
menuBar.add(menu);

frame.setJMenuBar(menuBar);
frame.setSize(200, 100);
frame.setVisible(true);
setLookFeel();
}

public static void setLookFeel() {
try {
// 设置外观
UIManager.setLookAndFeel(new SubstanceLookAndFeel());
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
// 设置主题
SubstanceLookAndFeel.setSkin(new CremeSkin());
// 设置按钮外观
SubstanceLookAndFeel
.setCurrentButtonShaper(new StandardButtonShaper()); // 设置水印
SubstanceLookAndFeel
.setCurrentWatermark(new SubstanceBubblesWatermark());
// 设置边框
SubstanceLookAndFeel
.setCurrentBorderPainter(new StandardBorderPainter());
// 设置渐变渲染
// SubstanceLookAndFeel
// .setCurrentGradientPainter(new StandardGradientPainter());
// 设置标题
// SubstanceLookAndFeel
// .setCurrentTitlePainter(new MatteHeaderPainter());
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
}

}
...全文
439 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kyunchen 2015-10-10
  • 打赏
  • 举报
回复
我最后发现,在我们做的swing开发中如果存在没有指定显示的宽度或者高度的容器包含给定了指定高度和宽度的组件,在使用substance就会报错。最后研究源码得出的结论是这个是substance的bug。
xnx3 2015-02-15
  • 打赏
  • 举报
回复
import java.awt.BorderLayout; import java.awt.Desktop; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import javax.security.auth.callback.ConfirmationCallback; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import org.jvnet.substance.SubstanceLookAndFeel; import org.jvnet.substance.skin.BusinessBlackSteelSkin; import org.jvnet.substance.skin.SubstanceOfficeBlue2007LookAndFeel; import org.jvnet.substance.utils.SubstanceConstants.ImageWatermarkKind; import org.jvnet.substance.watermark.SubstanceImageWatermark; import com.xnx3.*; import UI.BrowserJframe; import UI.BrowserMainJframe; import UI.LogJframe; import UI.MainJframe; import UI.RegisterJframe; import UI.Test; import action.File; import action.UIFunc; import include.Command; public class Main { public static void main(String[] args) { lookAndFeel(); //外观设置 } /** * 界面 */ public static void lookAndFeel(){ try { //外观设置 UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel()); JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); SubstanceLookAndFeel.setSkin(new mySkin()); } catch (Exception e) { //如果设置lookAndFeel外观失败,则还原为系统风格 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (InstantiationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (UnsupportedLookAndFeelException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // new Func.File().log("设置界面外观异常捕获:"+e.getMessage()); } } } class mySkin extends BusinessBlackSteelSkin{ public mySkin(){ super(); try { //新建一个图片水印,路径可以自己该,使用自己喜欢的图片来做应用程序的水印图片、 SubstanceImageWatermark watermark = new SubstanceImageWatermark(Main.class.getResourceAsStream("include/Module/j2se/res/bg.png")); watermark.setOpacity(1f); watermark.setKind(ImageWatermarkKind.APP_CENTER); // new Func.File().log("创建水印背景完毕"); this.watermark=watermark; } catch (Exception e) { // new Func.File().log("初始化界面捕获异常:"+e.getMessage()); } } }
Kyunchen 2015-01-28
  • 打赏
  • 举报
回复
上面贴上去的代码是一个重现问题的demo代码,可以直接使用,只需要下载一个substance.jar就可以了,还望大神能提供帮助,真心的感谢了,最主要的是我百度,google之后关乎这个的资料非常少,问题也各不一样,使用了substance之后程序出现各种报错。这个只是其中一个
Kyunchen 2015-01-28
  • 打赏
  • 举报
回复
这个是一个在java swing开发过程中,在设置组件的外观显示的时候使用了substance.jar,在setLookFeel操作之后,菜单就出现了最上面的bug截图 请大神。。。。。求助
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数调用此函数,将计...

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧