`
修补匠
  • 浏览: 9364 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

画出你的Swing界面

 
阅读更多

      这些天日子过得很无聊,所以就花时间画了画Swing界面。之前很多牛人们发了很多厉害的帖子(像三号管家,还有什么刀来的?),但是对于新手(像我)来说,这样的例子未免太过复杂了,他们只想快速地知道界面是怎么画出来的,然后能快速实践,而不想去研究那一大推的代码。基于此,本人萌发了写此文的冲动。由于本人也是菜鸟,所以如果做得不好,还请高手们键下留情。

 

      首先当然是先奉上截图:

 

 

 

 

 

上图中的主面板实现自JComponent,然后重写其paintComponent(Graphics g)方法绘制而成。本界面的所有组件都是这样做出来。所以说容易吧。代码如下:

 

 

/**
 * 主面板
 * @author Guijin.Liang
 *
 */
public class MyContentPanel extends JComponent{
	
	private static final long serialVersionUID = 1L;
	
	public void paintComponent(Graphics g)
	{
		g.setColor(new Color(168,148,128));//设置边框颜色
		g.drawRoundRect(0, 0, 681, 121, 20, 20); //画一个圆角矩形
		
		//消除锯齿
		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
				                               RenderingHints.VALUE_ANTIALIAS_ON);
		Graphics2D g2 = (Graphics2D)g;
		g2.addRenderingHints(rh);
		//半透明
		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
		//设置填充颜色,这里设置了渐变,由下往上
		g2.setPaint(new GradientPaint(this.getWidth()/2
				                      , 1
				                      , new Color(255,255,255)
		                              , this.getWidth()/2
		                              , this.getHeight() -1
		                              , new Color(0,0,255)));
		//填充圆角矩形
		g2.fillRoundRect(0, 0, 681, 121, 20, 20);
		
	}

}
 

这样就实现了JFrame的内容面板了,那么接下来只要把它加到JFrame里就行了。

 

    this.setUndecorated(true);//无修饰
    this.setContentPane(new MyContentPanel());//就是这一句了
    this.setLayout(null);//布局,设置为空是为了能够使用setBounds()方法进行布局
    this.setSize(682, 122);//设置窗口大

 

那那些大按钮呢(“我的文件、我的网络...”)?其实也是这样做出来的。话不多说。看完整代码:

 

package com.lgj.button;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.AlphaComposite;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;

/**
 * 大按钮
 * @author Guijin.Liang
 *
 */
public class BigButton extends JComponent 
                       implements MouseListener{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String imagePath;//图片路径
	private String fontText;//文字
	private RenderingHints rh;
	
	public BigButton(String imagePath, String fontText)
	{
		this.imagePath = imagePath;
		this.fontText = fontText;
		rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
		this.addMouseListener(this);
	}
	
	public void paintComponent(Graphics g)
	{
        Graphics2D g2 = (Graphics2D)g;
		g2.setRenderingHints(rh);
		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f));//不透明
		GradientPaint gp = new GradientPaint(this.getWidth()/2
                                             , 0
                                             , new Color(153,51,250)
                                             , this.getWidth()/2 
                                             , this.getHeight() 
                                             , new Color(250,255,240));
		g2.setPaint(gp);
		g2.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
		
		loadImageAndText(g2, this.imagePath, this.fontText);
    	this.updateUI();
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		
		
	}

	//光标经过
	@Override
	public void mouseEntered(MouseEvent e) {
		
		Graphics g = this.getGraphics();
		Graphics2D g2 = (Graphics2D)g;
		
		g2.setRenderingHints(rh);
		GradientPaint gp = new GradientPaint(this.getWidth()/2
				                             , 0
				                             , new Color(255,0,0)
		                                     , this.getWidth()/2
		                                     , this.getHeight()
		                                     , new Color(255,255,255));
		
		g2.setPaint(gp);
		g2.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
		
		loadImageAndText(g2, this.imagePath, this.fontText);
    	this.updateUI();
	}

	//光标移出
	@Override
	public void mouseExited(MouseEvent e) {
        
		Graphics2D g2 = (Graphics2D)this.getGraphics();
		
		g2.setRenderingHints(rh);
		GradientPaint gp = new GradientPaint(this.getWidth()/2
                                             , 0
                                             , new Color(153,51,250)
                                             , this.getWidth()/2 
                                             , this.getHeight() 
                                             , new Color(250,255,240));
		
		g2.setPaint(gp);
		g2.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
		
		loadImageAndText(g2, this.imagePath, this.fontText);
    	this.updateUI();
	}
	
	//加载图片和文字
	public void loadImageAndText(Graphics2D g2,String path, String text)
	{
		ImageIcon icon = new ImageIcon(this.getClass().getResource(path));
		Image image = icon.getImage();
		g2.drawImage(image, 20, 10, 60, 60, this);
		
		g2.setColor(new Color(0,0,0));
    	Font font = new Font("某字体",Font.HANGING_BASELINE,15); //UI字体
    	g2.setFont(font);
    	g2.drawString(text, 20, 90);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		
	}
}
 

这样就实现了上面的按钮,并添加了动作,那么接下来只要添加到JFrame就OK了。部分代码如下

 

                //我的音乐按钮
		MyMusicButtion myMusicBtn = new MyMusicButtion("/images/8.png", "我的音乐");
		myMusicBtn.setBounds(458, 10, 102, 102);
		this.add(myMusicBtn);

 

MyMusicButton是BigButton的子类,为的是重写BigButton的mouseClicked(MouseEvent e)方法以便作特定操作。代码如下:

 

/**
 * 我的音乐按钮
 * @author Guijin.Liang
 *
 */
public class MyMusicButtion extends BigButton{

	public MyMusicButtion(String imagePath, String fontText) {
		super(imagePath, fontText);
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

    public void mouseClicked(MouseEvent e) {
		
    	MyDialog dialog = new MyDialog();
		dialog.setVisible(true);
	}
}

 

这样就完成图一界面的制作了。其他不多言了,源程序都放在附件里,很小的程序,很适合新手交流(当然偶也是,呵呵)。关于代码严重违反DRY(Don't repeat yourself)和OCP(Open closed principle)的软件设计原则的问题,由于本程序的目的在于介绍如何快速用Swing画出界面,而不是真正地去设计一个软件。所以还望键谅。

  • 大小: 35.2 KB
  • 大小: 76.6 KB
分享到:
评论
5 楼 嘻哈方式 2011-08-12  
好炫哦!
4 楼 Coder211 2011-07-03  
感觉像是Windows MFC 程序的风格!
3 楼 Coder211 2011-07-03  
不错不错
2 楼 003 2011-06-30  
哈哈,不错不错,在当今变态的天朝web满天飞的国情下,难得来几个给力的桌面应用

提醒楼主一下,private static final long serialVersionUID = 1L; ,这个习惯灰常不好,Eclipse里直接点的吧, 那干嘛不点第二项呢,呵呵
1 楼 liusondark 2011-06-30  
GUI又爱又恨

相关推荐

    Swing精美界面设计和动画制作教程+实例

    Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面...

    swing界面美化包

    总的来说,Swing界面美化是Java GUI开发中的一项重要技能,通过合理利用Look-and-Feel机制和第三方库,开发者可以打造出独特且吸引人的用户界面,提升用户体验。在实际项目中,结合业务需求和个人审美,灵活运用这些...

    Java Swing 界面美化包-含源码

    Java Swing 是Java标准库中的一个组件,用于创建图形用户界面(GUI)。Swing 提供了丰富的组件集合,如按钮、文本框、菜单等,用于构建桌面应用程序。然而,Swing 的默认界面风格(LookAndFeel)在视觉上可能相对...

    Swing画的界面

    在"Swing界面"的设计中,开发者通常会利用布局管理器(如BorderLayout、GridLayout、FlowLayout和BoxLayout)来安排组件的位置,以及JFrame作为顶级容器来承载整个应用的界面。此外,通过继承JApplet或者JFrame类,...

    swing炫酷界面与功能实现

    Swing 提供了丰富的组件和功能,使得开发者可以构建出具有吸引力且功能强大的用户界面。在"swing炫酷界面与功能实现"这个主题中,我们将深入探讨如何利用Java Swing 创建美观且功能丰富的应用。 首先,Swing 提供了...

    基于java swing界面的PDF绘画工具

    在"基于Java Swing界面的PDF绘画工具"项目中,开发人员利用Swing构建了一个用户友好的界面,允许用户在PDF文档上进行绘图操作。这个工具分为两个主要界面:预览界面和配置界面。 预览界面提供了一个可视化的PDF文档...

    java+swing漂亮软件界面+超酷+以及javaswing教程.7z

    "java+swing漂亮软件界面+超酷+以及javaswing教程.7z"这个压缩包文件显然包含了关于如何利用Java Swing创建出吸引人的、具有超酷效果的软件界面的资源和教程。 Java Swing 提供了一系列的组件,如JFrame,它是窗口...

    在swing界面中嵌入javaFX运行的视频

    这篇名为“在Swing界面中嵌入JavaFX运行的视频”的博客文章探讨了如何将JavaFX的视频播放能力整合到Swing应用中,以提升用户体验。 首先,我们需要理解Swing和JavaFX之间的交互。虽然Swing是早期的UI库,但JavaFX因...

    swing界面设计之JTree

    《Swing界面设计之JTree》是一本深入探讨Java Swing组件库中JTree类的专著。JTree是Swing框架中的一个核心组件,用于在图形用户界面中展示树状数据结构,它允许用户交互地浏览和操作这些数据。本书详细讲解了如何...

    基于Java的Swing图形界面设计源码

    本设计源码提供了一个基于Java的Swing图形界面。项目包含59个文件,主要使用Java编程语言。文件类型包括30个Java字节码文件、21个Java源代码文件、4个XML配置文件、3个Idea项目文件、1个GIT忽略文件。该项目是一个...

    《java+swing图形界面开发与案例详解》源代码

    然而,这同时也意味着Swing界面可能不如一些本地GUI库那样流畅。为了解决这个问题,Java提供了一些优化技术,如double-buffering和及时绘制(Repaint Manager),来改善动画和滚动效果。 在实际项目中,开发者还...

    java用swing和awt写的滑动界面

    Java Swing和AWT是Java平台上的两种主要GUI(图形用户界面)工具包,用于构建桌面应用程序。本篇文章将深入探讨这两个库,以及如何利用它们创建具有滑动效果的界面,特别是针对登录界面的设计。 首先,AWT...

    计算器swing界面练习

    在这个“计算器swing界面练习”中,我们主要关注如何使用Swing构建一个基本的计算器应用,该应用具备加、减、乘、除等基本运算功能,并通过`ActionListener`监听用户操作。 首先,`JFrame`是Swing中的顶级容器,...

    swing界面socket多线程聊天室

    在本项目中,“swing界面socket多线程聊天室”是一个基于Java Swing的客户端-服务器通信应用,它利用TCP协议来实现实时的聊天功能。这个系统不仅提供了群聊和私聊的功能,还允许用户发送文件,并且具备用户登录与...

    java swing动画

    通过学习和实践 Java Swing 动画,开发者可以创建出更加吸引人的用户界面,提高用户体验。同时,Swing 动画也是理解和掌握 Java AWT 和 Swing 库的高级特性的良好途径。在实际项目中,你可以利用这些技术来实现诸如...

    基于Swing界面的单机版斗地主

    【基于Swing界面的单机版斗地主】是一款使用Java编程语言开发的桌面应用程序,主要利用了Swing库来构建用户界面。Swing是Java提供的一个轻量级的图形用户界面(GUI)工具包,它允许开发者创建美观且功能丰富的窗口...

    基于Swing界面的打地鼠小游戏

    **基于Swing界面的打地鼠小游戏** 在Java编程领域,Swing库是用于构建桌面应用程序用户界面的强大工具。这个“打地鼠小游戏”项目,就是利用Swing库创建的一个简单但有趣的互动游戏,旨在帮助新手熟悉Java Swing的...

    java swing简单画板

    Java Swing 是Java GUI(图形用户界面)库的一部分,它提供了丰富的组件和工具,用于构建桌面应用程序。在这个"java swing简单画板"项目中,开发者利用Swing构建了一个基础的绘图应用,用户可以在此画板上执行常见的...

    Swing模板样式(全56种经典)

    Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。在Java中,Swing提供了丰富的组件库,用于创建美观且功能强大的桌面应用程序。Swing模板样式,即Swing组件的外观...

    java版swing界面坦克大战

    在Java版的坦克大战中,Swing扮演了图形界面的主要角色,通过创建窗口、按钮、面板等元素,为游戏构建出直观的操作界面。 在坦克大战游戏中,主要包含以下几个关键组件和功能: 1. 游戏主窗口:Swing中的`JFrame`...

Global site tag (gtag.js) - Google Analytics