`
kinganpo
  • 浏览: 51432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

统一设置字体和颜色简单实现换肤功能

阅读更多
通过统一设置界面中所有组件的字体和颜色可以简单的实现“换肤”功能。
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;

public class GuiTool {
	 /**
     * 统一设置字体和颜色
     * @param Comp 组件(容器)
     * @param font 字体
     * @param back 背景色
     * @param fore 前景色
     */
	public static void setGlobalFontAndColor(Component Comp,Font font,Color back,Color fore) {
	    Comp.setFont(font);
	    Comp.setBackground(back);
	    Comp.setForeground(fore);
	    if (Comp instanceof Container) {
	    	Component[] components = ((Container)Comp).getComponents();
	    	for (int i = 0; i < components.length; i++) {
		        Component child = components[i];
		        setGlobalFontAndColor(child,font,back,fore);
	    	}
	    }
	 }

	public static Font getFont(String s_type,String s_style,int  size){
		int tyle = Font.PLAIN;
		if(s_style.equals("Blod")){
			tyle = Font.BOLD;
		}else if(s_style.equals("Italic")){
			tyle = Font.ITALIC;
		}
		return new Font(s_type,tyle,size);
	}
	
	public static Color[] getColor(String colorze){

		Color[] colors = new Color[2];
		colors[0] = Color.BLACK;
		colors[1] = Color.WHITE;
		if(colorze!=null){
			if(colorze.equals("黑-红")){
				colors[0] = Color.BLACK;
				colors[1] = Color.RED;
			}
			if(colorze.equals("灰-绿")){
				colors[0] = Color.LIGHT_GRAY;
				colors[1] = Color.GREEN;
			}
			if(colorze.equals("粉-蓝")){
				colors[0] = Color.PINK;
				colors[1] = Color.BLUE;
			}
			if(colorze.equals("橙-紫")){
				colors[0] = Color.ORANGE;
				colors[1] = Color.MAGENTA;
			}
			if(colorze.equals("青-黄")){
				colors[0] = Color.CYAN;
				colors[1] = Color.YELLOW;
			}
		}
		return colors;
	}
}

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ThemeStyle extends JFrame{
	private JPanel p1,p2;
	private JLabel l1,l2,l3;
	private JComboBox type,style,size,color;
	private JCheckBox reset;
	private JScrollPane sp;
	private JTextArea ta;
	private JButton b;
	public ThemeStyle() {
		init();
		display();
		this.setTitle("Java简单实现换肤功能");
		this.setLocationRelativeTo(null);//窗口居中
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public void init(){
		String[] s_type = {"宋体","Serif","Dialog",};
		String[] s_style = {"Plain","Blod","Italic"};
		String[] s_size = {"9","10","11","12","13","14","15"};
		String[] s_color = {"黑-白","黑-红","灰-绿","粉-蓝","橙-紫","青-黄"};
		p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p2 = new JPanel();
		l1 = new JLabel("设置字体:");
		l2 = new JLabel("设置颜色:");
		reset = new JCheckBox("窗口自适");
		reset.setToolTipText("窗口大小自动适应");
		type = new JComboBox(s_type);
		style = new JComboBox(s_style);
		size = new JComboBox(s_size);
		size.setSelectedItem("12");
		color = new JComboBox(s_color);
		color.setToolTipText("背景色-前景色");
		size.setMaximumRowCount(5);
		ta = new JTextArea();
		sp = new JScrollPane(ta);
		sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		b = new JButton("OK");
		l3 = new JLabel("<html><hr>Developed by Kinganpo in Shanghai.2011-01-17 <hr></html>");
		p1.add(l1);
		p1.add(type);
		p1.add(style);
		p1.add(size);
		p1.add(l2);
		p1.add(color);
		p1.add(reset);
		p1.add(b);
		p2.add(l3);
		add(p1,BorderLayout.NORTH);
		add(sp,BorderLayout.CENTER);
		add(p2,BorderLayout.SOUTH);
		ta.setText("利用统一改变界面所有组件的字体及颜色来实现简单的换肤功能!\n" +
				"setGlobalFontAndColor(Component Comp,\n" +
				"Font font,Color back,Color fore)\n" +
				"遍历组件进行统一设置\n" +
				"再setVisible(true)显示出来!\n" +
				"================================\n\n");
		ta.setLineWrap(true);
		ta.setEditable(false);
		b.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				display();
			}
		});
	}
	
	public void display(){
		this.dispose();
		String s_type = (String)type.getSelectedItem();
		String s_style = (String)style.getSelectedItem();
		int s_size = Integer.parseInt((String)size.getSelectedItem());
		Font font = GuiTool.getFont(s_type, s_style, s_size);
		Color[] colors = GuiTool.getColor((String)color.getSelectedItem());
		
		GuiTool.setGlobalFontAndColor(this,font,colors[0],colors[1]);
		
		if(reset.isSelected()){
			this.pack();
		}else{
			this.setSize(600,450);	
		}
		ta.append(font.toString()+"\n");
		ta.append(colors[0].toString()+"\n");
		ta.append(colors[1].toString()+"\n\n");
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		new ThemeStyle();
	}
}






虽然不是真正意义上的换肤,但是效果自认为还是可以的。今天找了几个swing风格包,突发奇想就弄了这个简单的。代码简单明了留着纪念啦!(*^__^*) 嘻嘻……
  • 大小: 19 KB
  • 大小: 21.1 KB
2
1
分享到:
评论

相关推荐

    仿QQ换肤功能

    "仿QQ换肤功能"是一个常见的需求,特别是在社交应用和桌面软件中,它允许用户根据个人喜好更改应用的外观和主题颜色,从而提高用户的满意度和使用体验。下面将详细介绍这个功能的实现原理和相关技术。 首先,换肤...

    MFC加载皮肤文件实现界面换肤程序

    例如,用加载的皮肤图像替换控件默认的背景,用皮肤颜色设置字体颜色。 此外,为了方便管理和维护,可以设计一个皮肤管理类,负责加载、应用和切换皮肤,同时提供接口供其他部分代码调用。这样,整个程序的界面风格...

    MIUI主题风格_一种Android系统换肤功能的设计 思路(董红光)

    1. **Symbian系统的主题**:Symbian系统早期提供了一种简单的主题更换功能,但其灵活性和自定义程度相对较低。 2. **Android系统下的主题**: - **XML声明主题/样式**:通过XML文件定义主题和样式,程序可以通过...

    iOS APP动态换肤方案详解.docx

    (2) 基于UIView的分类实现:利用UIView的分类记录换肤方法,统一重写样式设置。换肤时由管理中心发送通知,组件自动执行换肤。这种方法减少了代码修改,但可能影响性能。 总结,iOS应用的动态换肤方案设计需要综合...

    Qt4.8.2 界面换肤

    因此,皮肤设计和实现时需考虑各种平台的差异,如字体、颜色和图像渲染等方面。 通过以上介绍,我们可以看到在Qt4.8.2中实现界面换肤是一个涉及多方面技术的工作,包括QSS的使用、皮肤设计、事件处理、资源管理、...

    换肤程序程序 C++实例

    通过学习和理解这个实例,开发者可以掌握在C++中实现换肤功能的基本步骤和技术,进一步提升自己的软件开发技能。对于想要深入研究GUI编程和用户体验设计的程序员来说,这是一个非常有价值的实践项目。

    C#换皮肤,换字体颜色,大小

    在C#编程中,换肤和改变字体颜色、大小是常见的用户界面(UI)定制功能,可以提升软件的用户体验和视觉吸引力。以下是对这个主题的详细解析: 首先,C#中的用户界面通常基于Windows Forms或WPF(Windows ...

    程序窗体界面换肤的实现(VB6源码).zip

    在VB6(Visual Basic 6)环境中,程序员可以利用各种技术来实现程序窗体界面的换肤功能,提升用户体验和视觉吸引力。VB6虽然相对较老,但仍然被许多企业和开发者用于开发桌面应用程序。本篇文章将深入探讨如何在VB6...

    网站换肤.doc网站换肤.doc

    - **主题(Themes)**:主题是一组预定义的样式规则,用于统一网站中各个元素的外观,如颜色、字体和布局。它们通常存储在`App_Themes`目录下的`.skin`或`.css`文件中。 - **皮肤(Skins)**:皮肤是更具体的设计...

    swift-NightMode夜间模式(换肤设置)

    在iOS应用开发中,夜间模式(也称为换肤设置)是一项重要的功能,它允许用户根据个人喜好或环境光线切换到暗色主题。Swift语言提供了多种方法来实现这一特性。本篇将详细介绍如何在Swift中实现夜间模式,并探讨相关...

    用Visual Studio 2017C#WPF实现换肤技术拥有20多套皮肤不同风格的样式.rar

    在本文中,我们将深入探讨如何使用Visual Studio 2017和C# WPF技术来实现应用程序的换肤功能,从而为用户提供丰富的视觉体验。WPF(Windows Presentation Foundation)是微软.NET Framework的一部分,它提供了强大的...

    Android 摇一摇换肤 源码

    在Android开发中,"摇一摇换肤...以上就是"Android摇一摇换肤"功能的核心技术点和实现流程。在压缩包中的"新建文件夹"可能包含了源码、资源文件和相关文档,通过研究这些内容,你可以更深入地理解这一功能的具体实现。

    基于vc++换肤程序

    这通常涉及到改变控件的背景色、边框样式、字体颜色等,确保界面的统一性。 5. **皮肤XML格式**:为了方便管理和交换皮肤,可以将皮肤数据存储为XML文件。XML的结构化特性使得皮肤数据易于解析和编辑,同时也方便了...

    ASP 换皮肤(例子)

    "ASP换皮肤"指的是在ASP应用程序中实现用户界面的可定制化,允许用户根据个人喜好选择不同的界面风格,如字体、字体大小、颜色、背景以及图片等元素。这通常涉及到前端界面的设计与后端数据的处理。 1. **CSS(层叠...

    Silver_换肤_silver_

    此换肤模块是为运行在.NET 4.0环境的应用程序设计的,这意味着它利用了该版本的特性和API来实现其功能。 "Silver"这个标签可能指的是两个方面:一是可能与Silverlight有关,Silverlight是微软的一个已弃用的Web应用...

    devexpress.winform.skins换肤DEMO

    "DevExpress.WinForm.Skins" 是 DevExpress 提供的一个组件,用于在Windows Forms应用程序中实现皮肤定制和更换功能。这个"devexpress.winform.skins换肤DEMO"应该是一个演示项目,旨在帮助开发者理解并学习如何在...

    ASP.NET-C#换肤

    在这个文件中,你可以定义特定控件的属性,如颜色、字体、大小等,这些设置会被所有引用该皮肤的控件继承。 3. **创建皮肤**:创建皮肤文件首先需要在App_Skins目录下创建一个新的`.skin`文件,然后在文件中定义...

    VB 界面美化、窗体换肤

    4. **动态换肤功能**:实现窗体的动态换肤,需要编写代码来加载和应用不同的皮肤设置。这可能涉及到读取皮肤文件,更新控件的属性,以及处理皮肤切换时的动画效果。一种常见的实现方式是使用控件容器,将所有界面...

    vc换肤,制作仿苹果电脑的窗口界面

    7. **资源文件与皮肤配置**: 为了实现换肤,开发者需要将各种界面元素如图片、颜色和字体等存储为资源文件,并编写代码解析这些资源以动态改变界面。这可能涉及XML或JSON格式的配置文件。 8. **动画和过渡效果**: ...

    VS窗口换皮肤程序 源码

    它的核心功能在于解析皮肤文件,将皮肤元素与控件进行绑定,从而改变控件的外观,如颜色、字体、边框样式等。 在"皮肤文件"中,包含了各种预设的皮肤样式。这些文件通常是以XML格式存储的,里面定义了各个控件的...

Global site tag (gtag.js) - Google Analytics