`
kongshanxuelin
  • 浏览: 926950 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

使用Substance制作漂亮的swing皮肤(附源码)

阅读更多

最近项目用swing开发桌面程序,感觉本身的swing界面实在不怎么样,所以就使用了Substance开源产品,感觉很不错,推荐给大家,示例代码如下:

package com.cxlh.ui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;

public class MainFrame extends JFrame {

	private JMenuBar mainBar = new JMenuBar();
	private JMenu sysMenu = new JMenu("系统");
	private JMenuItem exitItem = new JMenuItem("退出");
	private JMenuItem loginItem = new JMenuItem("登陆");
	private JMenu aboutMenu = new JMenu("关于");
	private JMenuItem helpItem = new JMenuItem("帮助");
	
	private JPopupMenu popup = new JPopupMenu();
	private JMenuItem sendItem = new JMenuItem("发信息");
	private JMenuItem infoItem = new JMenuItem("看账户");
	private JMenuItem logoutItem = new JMenuItem("注销");

	private JTable table;
	private JScrollPane jspLogin;
	private JScrollPane jsplogTA;
	private JPanel displayPanel;
	private JPanel btnPanel;
	private JButton dispalyBtn;
	private JButton preBtn;
	private JButton nextBtn;

	public static DefaultTableModel defaultModel;
	public static JTextArea logTA;	
	
	public MainFrame() {
		super("皮肤测试");
		setMainBar();
		setPanel();
		initFrame(600, 450);
	}
	
	private void initFrame(int frameWidth, int frameHeight) {
		setTitle("皮肤测试");
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension screenDimension = tk.getScreenSize();
		int screenWidth = screenDimension.width;
		int screenHeight = screenDimension.height;
		setLocation((screenWidth - frameWidth) / 2,
				(screenHeight - frameHeight) / 2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(frameWidth, frameHeight);
		setVisible(true);
	}	

	private void setMainBar() {

		setJMenuBar(mainBar);
		mainBar.add(sysMenu);
		mainBar.add(aboutMenu);
		sysMenu.add(loginItem);
		sysMenu.addSeparator();
		sysMenu.add(exitItem);
		aboutMenu.add(helpItem);
		popup.add(sendItem);
		popup.add(infoItem);
		popup.add(logoutItem);
	}

	private void setPanel() {
		String[][] playerInfo = new String[0][0];
		String[] names = { "用户", "登陆时间", "当前状态" };
		defaultModel = new DefaultTableModel(playerInfo, names);
		logTA = new JTextArea();
		logTA.setLineWrap(true);
		jsplogTA = new JScrollPane(logTA);
		table = new JTable(defaultModel);
		jspLogin = new JScrollPane(table);
		displayPanel = new JPanel();
		btnPanel = new JPanel();

		displayPanel.setLayout(new BorderLayout());
		displayPanel.add(jsplogTA, BorderLayout.CENTER);
		displayPanel.add(btnPanel, BorderLayout.SOUTH);

		dispalyBtn = new JButton("显示10条");
		preBtn = new JButton("向前10条");
		nextBtn = new JButton("向后10条");
		btnPanel.add(dispalyBtn);
		btnPanel.add(preBtn);
		btnPanel.add(nextBtn);
		jspLogin.setPreferredSize(new Dimension(600, 69));
		add(jspLogin, BorderLayout.NORTH);
		add(displayPanel, BorderLayout.CENTER);
	}	
	
	
	public static void main(String[] args) {
		JFrame.setDefaultLookAndFeelDecorated(true);
		try {
			UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());
		} catch (Exception e) {
			System.out.println("Substance Raven Graphite failed to initialize");
		}
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				MainFrame w = new MainFrame();
				w.setVisible(true);
			}
		});
	}
}
 
  • 大小: 27.8 KB
分享到:
评论
6 楼 ext__chlj 2009-08-20  
10:56:34,593 DEBUG ReceiveService:88 - 启动服务器.........
org.jvnet.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
at org.jvnet.substance.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:2368)
at org.jvnet.substance.SubstancePanelUI.createUI(SubstancePanelUI.java:57)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:36)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)10:56:51,203 DEBUG SendService:132 - TCP发送处理成功

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:243)
at javax.swing.UIDefaults.getUI(UIDefaults.java:751)
at javax.swing.UIManager.getUI(UIManager.java:1016)
at javax.swing.JPanel.updateUI(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:69)
at javax.swing.JPanel.<init>(JPanel.java:92)
at javax.swing.JPanel.<init>(JPanel.java:100)
at com.comm.gui.TransPanel.<init>(TransPanel.java:28)
at com.comm.gui.DialogWindow$4$1.<init>(DialogWindow.java:203)
at com.comm.gui.DialogWindow$4.getDataListenner(DialogWindow.java:202)
at com.comm.service.ReceiveService$1.run(ReceiveService.java:170)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
UIDefaults.getUI() failed: createUI() failed for com.comm.gui.TransPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] java.lang.reflect.InvocationTargetException
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:711)
at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133)
at javax.swing.UIDefaults.getUI(UIDefaults.java:757)
at javax.swing.UIManager.getUI(UIManager.java:1016)
at javax.swing.JPanel.updateUI(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:69)
at javax.swing.JPanel.<init>(JPanel.java:92)
at javax.swing.JPanel.<init>(JPanel.java:100)
at com.comm.gui.TransPanel.<init>(TransPanel.java:28)
at com.comm.gui.DialogWindow$4$1.<init>(DialogWindow.java:203)
at com.comm.gui.DialogWindow$4.getDataListenner(DialogWindow.java:202)
at com.comm.service.ReceiveService$1.run(ReceiveService.java:170)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
org.jvnet.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
我没有用substance 一切正常,没有问题,这是我的main
public static void main(String args[]) {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
try {
UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();

}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainWindow().setVisible(true);
}
});
}
我是用的 substance5.2 请问您遇到这样的问题吗?有解决方法吗?谢谢、、、、、
5 楼 liugr 2008-11-11  
开源的皮肤包很多,比这个漂亮的也很多啊
4 楼 coolstar648 2008-11-07  
lz能不能提供一下架包的下载地址啊?
3 楼 xht314 2008-11-07  
这个包现在有个BUG,就是不断的最大化,恢复,手动调整大小,最后鼠标的形状就会变成两个箭头形式,变以不回去了. 
2 楼 小疯子 2008-09-25  
没有看到你用Substance制作了什么皮肤啊, 只是使用了Substance吧!
这标题也太...
1 楼 littleJava 2008-09-25  
早就用过了,皮肤是不错,就是它的下载资源太难找了……

相关推荐

    substance 6.1 swing 皮肤包

    "Substance 6.1 Swing 皮肤包"是一款专为Java Swing应用设计的视觉样式库,它为Swing组件提供了丰富的、高度可定制的外观和感觉。Substance库以其独特的设计和灵活性,允许开发者轻松地改变应用程序的界面风格,从而...

    Java的Swing界面皮肤、主题使用(substance.jar)内附使用教程

    为了提升用户界面的视觉吸引力,开发者可以使用第三方库,如Substance库,来改变Swing组件的皮肤和主题。Substance.jar是一个流行的Java库,专门用于为Swing应用添加各种美观的主题和皮肤。 在Java中使用Substance...

    swing皮肤-substance

    为了提升用户体验和视觉吸引力,开发人员可以使用第三方库来改变Swing应用程序的皮肤,其中"Substance"就是一种广受欢迎的皮肤库。 Substance库为Swing应用提供了多种独特的视觉主题,这些主题不仅改变了控件的外观...

    swing开源皮肤Substance6.1

    Swing开源皮肤Substance6.1是一款为Java Swing应用程序提供美观界面的库,它极大地提升了Swing组件的视觉效果,让应用看起来更加现代和专业。Substance库是完全开源的,允许开发者根据需要自定义和扩展皮肤,为用户...

    swing的开源外观皮肤Substance5.2,源码和jar相关library全

    使用Substance,开发者可以通过简单的代码就能为Swing应用换上新的皮肤。例如,可以使用以下代码片段切换到特定的主题: ```java LookAndFeel.uninstallLookAndFeel(); LookAndFeel.installLookAndFeel( ...

    Java Swing 界面美化包-含源码

    1. **丰富的皮肤选择**:Substance 包含了大量的预定义皮肤,每种皮肤都有独特的颜色方案和布局,可以满足不同用户的审美需求。这些皮肤可以根据应用的定位和目标用户群体进行选择和切换。 2. **自定义皮肤**:除了...

    substance(皮肤)源码

    学习 Substance 的源码,可以帮助开发者了解如何在自己的 Swing 应用中集成 Substance,例如如何设置 LookAndFeel、切换皮肤、自定义主题等。 9. **设计模式**: 在 Substance 的源码中,可以发现很多经典的设计...

    swing substance-6.0.jar 皮肤包.zip

    在"swing substance-6.0.jar 皮肤包.zip"中,包含的"swing substance-6.0.jar"文件是Substance库的实现,开发者可以通过将其添加到项目类路径来使用这个库。"皮肤包"可能包含了额外的主题或皮肤资源,方便开发者...

    swing开源皮肤Substance6.0

    Swing开源皮肤Substance6.0是一款为Java Swing应用程序提供美观、可定制界面的库。它为开发者提供了丰富的皮肤选择,让应用的外观更加现代化,同时也增强了用户体验。Substance库不仅包含了多种预设的皮肤风格,还...

    substance+swing完整案例

    Substance 是一个流行的 Java Swing 库,它为 Swing 组件提供了丰富的皮肤和主题,使得 Java 图形用户界面(GUI)可以拥有更加美观和现代的外观。Swing 是 Java 平台上的标准 GUI 工具包,它允许开发者创建桌面应用...

    swing 皮肤包 substance.jar

    swing的皮肤包 substance.jar 可以设置swing组件的外观

    swing substance 最新发布包

    Swing Substance 是一个Java Swing 的UI主题库,它极大地扩展了Swing的视觉表现力,提供了丰富的皮肤和组件样式,让Java桌面应用看起来更加现代化和专业。最新发布的Swing Substance 包含了一系列更新和改进,旨在...

    JavaSwing substance.jar

    一直以来都认为用Swing做出来的程序太难看了,但是又无可奈何,但现在好了,有了substance.jar,只需要在你的程序中添加几行简单的代码,就可以做出非常漂亮的界面来,如果不是亲眼看到,你也许不敢相信这是真的;...

    substance美化包java swing

    Substance 是一个开源项目,专为 Java Swing 应用程序提供多种主题和皮肤,可以显著提升应用的外观和感觉。它提供了丰富的自定义选项,使得开发者能够轻松改变控件的样式,使应用程序看起来更加现代化、专业。...

    一个神奇的Swing软件substance

    Swing软件Substance库是一个非常独特且功能丰富的Java GUI(图形用户界面)工具包,它扩展了Java Swing组件,提供了大量的视觉主题和自定义样式,让开发者能够为应用程序创建出极具吸引力的用户界面。这个“神奇”的...

    substance7.1(全) Swing LAF

    "Substance7.1(全) Swing LAF"是一个针对Java Swing用户界面库的皮肤包,专注于提升应用程序的视觉外观和用户体验。Swing Look and Feel(LAF)是Java Swing框架的一部分,允许开发者改变应用程序的界面风格以适应...

    swing substance 实例集合

    swing substance 实例集合,打开之后,会去网上自动下载的,该实例包含了所有的substance的效果,Java的CS不再丑陋啦!!

    Java写的对Excel2007的操作小工具,POI, Swing Substance,附带源码

    Swing Substance库则是Java Swing的第三方皮肤框架,它为Swing组件提供了丰富的视觉样式和主题。Substance库使得Java应用可以拥有与操作系统或用户偏好相协调的外观和感觉,甚至可以自定义独特的界面风格。在这个小...

    java课程设计界面美化包,swing也可以这么漂亮

    Substance库是Java Swing的一个皮肤框架,它允许开发者轻松地改变Swing应用的外观和感觉,提供了一系列丰富多彩的主题。通过这个库,我们能够为Java应用添加极具视觉吸引力的界面,使程序看起来更加专业且用户友好。...

    substance-swingx.jar

    "substance-swingx.jar" 是一个专门为Java Swing应用程序提供美观皮肤和增强功能的库。SwingX是Swing的扩展库,而Substance则是Swing的一个主题引擎,它允许开发者为他们的应用添加丰富的视觉样式,使用户界面更加...

Global site tag (gtag.js) - Google Analytics