这些天日子过得很无聊,所以就花时间画了画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
分享到:
相关推荐
Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面...
swing做的一个家庭理财系统的,swing做的一个家庭理财系统的
分为预览界面和配置界面,配置后实时同步。绘画的PDF文件所占空间小,支持配置文件的导入导出,可以绘画文字、线条、矩形和图片,支持段落的自动换行和首行缩进。java swing界面,使用坐标定位绘画。
通过使用AWT和Swing提供的图形化界面组件库,java的图形化界面编程非常简单,程序只需要依次创建所需的图形组件,并以合适的方式将这些组件组织在一起,就可以开发出非常美观的用户界面 学习这个比较适合,对Java很...
采用TCP协议开发的,swing做界面的java socket聊天室 支持群聊和私聊,发文件,以及用户登录注册等
swing画界面小程序参考
[Java Swing图形界面开发与案例详解].王鹏等.扫描版,Java Swing 中文Api
从网上一个博文上搜集来的一些Swing特效的例子,如xp折叠效果_foldered_pane,鼠标悬停提示_tooltip,玻璃效果闪烁_glassbox,日历组件,环形右键弹出菜单等等.....绝对物超所值! 其中部分例子为jar形式,可直接运行......
本资源包含Swing方面的基础知识: 01分解颜色 02画板 03帧 04画布 05密码验证界面 06对话框 07滚动条 08边框 09单选框图片浏览器 10卡片布局管理器 11边界布局管理器 12进程条 13列表框和组合框 14选项卡 15菜单 16...
通过swing画出界面,连接数据库,用户通过数据库验证正确之后方可登录
Swing做的一个画图板项目,界面美观,功能全面
(2)工作时候,也许需要维护到 Swing 界面 (3)了解 MVC 架构,了解监听 使用GDI绘图 (1)画点 在pacman.cpp文件中找到: // 获取消息 if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg....
swing实现的网吧计费管理系统实现了上机、下机、计费、充值等功能、界面还加了swing外观技术、好好看、还有源代码.....
该应用程序包括了简单的算术运算、字符串处理图片显示等功能,必须包含有按钮、编辑框...(1) 用AWT或者Swing实现,可以借助于Eclipse等集成开发环境; (2) 程序运行良好,界面清晰。 提高要求: 在界面中能实现简单动画
通过swing绘画界面的一个小applet,实现文件上传,断点续传,嵌入网页或独立运行的功能。非常实用
用javaswing写的界面,具备新增体温记录、删除体温记录、查询异常学生、恢复所有列表,将学生体温记录保存到文件中,读取文件等丰富的功能
《Java动画、图形和极富客户端效果开发》讨论Java基本原理、Swing、Java2D、图形、图形用户界面(GUI)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。《Java动画、图形和极富客户端效果开发》第一...
本书讨论Java基本原理、Swing、Java 2D、图形、图形用户界面(GUl)、动画、性能和基于这些基本原理的用于创建漂亮应用程序的高级效果。本书第一部分讲述Java图形和用户界面编程的基本概念。第二部分讲述Java 2D和...
基于JAVA俄罗斯方块项目GUL_swing设计软件源码+word文档说明资料: 俄罗斯方块项目,基本功能包括:游戏主界面显示模块、方块及数据显示模块、方块移动控制模块、游戏界面颜色控制模块、游戏进度、等级控制模块等。...
有关Java2图形设计方面的电子教程,exe格式,阅读方便。...第二部分是关于Swing的应用,内容涉及Swing基础知识、组件结构、JComponent类库、标签与按钮、插入式界面样式、进度条和工具栏、窗口和对话框等。