前段时间,看着不少人用twaver的Swing在写东西,比如我们武林中的Swing刀客 和 Swing剑客(注三号管家chart图的模仿),都用到了写出了很漂亮的swing界面。下面我要分享的是用swing编写的图层叠加效果图,其中也用到了twaver的一些功能。(在此仅仅是为了分享给大家比较美的界面,希望能在这酷暑之际为大家带来一丝凉意或美的享受就心满意足了)。
在TWaver的各个使用手册,文档或Demo中我们可以看到,twaver提供了Layer的概念,就是图层,这与一些制图软件也有几分相似。在实际应用中也是比较的多。比如TWaver的水印、背景效果都是通过图层来叠加的。
下面我们就来看看这个精美的图层叠加图到底美在何处,先上最终效果图:
这是一个使用TWaver Java制作的自动布局的例子,有人能看得出这里使用了多少个图层合并而成的吗?
呵呵,我们先来看看整体的一个布局:首先frame中添加了一个LayeroutPanel,panel中放了一个network,network中间部分是用于存放网元,连线,右半部分是scrollPanel。
一. Network的叠加
我们先来看看中间这个network的图层是如何叠加的
1.阴影层
首先是在network的Cushion上添加了一个网元阴影层,cushion在TWaver的定义中是处于所有图层之下的一层。
network.addCanvasCushion(new ShadowCushion(this));
阴影也可以这样添加。
2.网元层
在默认图层上添加布局的网元
this.cloud = this.createNode("/demo/layout/images/cloud.png");
this.center1 = this.createNode("/demo/layout/images/center.png");
this.center2 = this.createNode("/demo/layout/images/center.png");
this.gather1 = this.createNode("/demo/layout/images/gather.png");
this.gather2 = this.createNode("/demo/layout/images/gather.png");
this.router1 = this.createNode("/demo/layout/images/router1.png", 0, "Router 1");
this.router2 = this.createNode("/demo/layout/images/router2.png", 1, "Router 2");
this.server1 = this.createNode("/demo/layout/images/pc.png", 2, "Spring Layout");
this.server2 = this.createNode("/demo/layout/images/pc.png", 3, "Office Network");
this.server3 = this.createNode("/demo/layout/images/pc.png", 4, "US Map");
this.client1 = this.createNode("/demo/layout/images/pc.png", 5, "Bar Chart");
this.client2 = this.createNode("/demo/layout/images/pc.png", 6, "Tag Cloud");
this.client3 = this.createNode("/demo/layout/images/pc.png", 7, "Bus Layout");
this.createLink(gather1, client1);
this.createLink(gather1, client2);
this.createLink(gather1, client3);
this.createLink(gather2, server1);
this.createLink(gather2, server2);
this.createLink(gather2, server3);
this.createLink(cloud, center1);
this.createLink(cloud, center2);
this.createLink(router1, center1);
this.createLink(router2, center2);
this.createLink(router1, gather1);
this.createLink(router2, gather2);
TWaver提供了多种布局的效果,这是一个左树形布局,下面的toolbar上提供了更多的布局方式。
3.背景层
设置network背景图片,背景层也是处于所有数据层之下的一层,但是在cushion层之上
this.setImageBackground("/demo/layout/images/bottom.png");
4.顶层
添加top的图层节点,并设置图层为1
this.top = this.createNode("/demo/layout/images/top.png");
this.top.setLayerID("top");
Layer topLayer = new Layer("top");
topLayer.setMovable(false);
topLayer.setSelectable(false);
this.getDataBox().getLayerModel().addLayer(1, topLayer);
使用一个Node最为最上层的图片,哈哈,这也是TWaver中的一个使用技巧。
5.工具条层
添加toolbar图层并设置为1,这样toolbar的图层会在top层之上
this.toolbar = this.createNode("/demo/layout/images/toolbar.png");
this.toolbar.setLocation(21, 68);
this.toolbar.setLayerID("toolbar");
Layer toolbarLayer = new Layer("toolbar");
toolbarLayer.setMovable(false);
toolbarLayer.setSelectable(false);
this.getDataBox().getLayerModel().addLayer(1, toolbarLayer);
工具条也是一张图片哦,哈哈,没想到吧!
工具条的动画效果
从上面分解中可以看出,工具条是叠加在top层之上的,这其中还有一个动画的效果,当鼠标移动到工具条所有的区域范围时,才会出现,移出并会隐藏。
this.getCanvas().addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
if(isAdjustingToolbar){
return;
}
if(toolbarBounds.contains(e.getPoint())){
if(!toolbar.isVisible()){
isAdjustingToolbar = true;
toolbar.setVisible(true);
TWaverUtil.animateMove(toolbar, toolbar.getWidth(), 0, new Runnable(){
public void run() {
isAdjustingToolbar = false;
}
});
}
}else{
if(toolbar.isVisible()){
isAdjustingToolbar = true;
TWaverUtil.animateMove(toolbar, -toolbar.getWidth(), 0, new Runnable(){
public void run() {
toolbar.setVisible(false);
isAdjustingToolbar = false;
}
});
}
}
}
});
6.最终合并效果
最后twaver根据添加的这些图层顺序,就会在network上叠加出一个左半部分的效果,如下:
二. ScrollPanel的叠加
看完network中间部分的叠加效果,我们再来看看这张图的右半部分scrollerPanel是如何叠加的
1. 组件层
这是最重要的放置内容面板的一层,里面放置了24个独立的组件。通过设置边框的范围让其只显示中间部分,每个独立的组件都可以单独操作:选中,移动,染色,tooltip…都可以呈现。
for(int i=0; i<24; i++){
JComponent component = null;
int index = i % 8;
if(index == 0){
component = new Router1();
}
... ...
if(component != null){
component.setPreferredSize(CARDSIZE);
component.setMaximumSize(CARDSIZE);
component.setMinimumSize(CARDSIZE);
component.setBounds(XGAP, i*CARDSIZE.height+YGAP, CARDSIZE.width-XGAP*2, CARDSIZE.height-YGAP*2);
this.add(component);
}
}
2.相框层
这是一个给每个组件设置相框的一个图层,首先我们需要相框图片
Rectangle rect = new Rectangle(0, i*CARDSIZE.height, CARDSIZE.width, CARDSIZE.height);
if(i != (this.currentIndex + 8)){
g2.drawImage(CARDIMAGE, rect.x, rect.y, rect.width, rect.height, null);
}else{
rect.grow(-XGAP+4, -YGAP+4);
g2.setColor(Color.white);
g2.setStroke(TWaverConst.BASIC_STROKE);
int d = 8;
g2.drawLine(rect.x, rect.y, rect.x+d*2, rect.y);
g2.drawLine(rect.x, rect.y, rect.x, rect.y+d);
g2.drawLine(rect.x+rect.width, rect.y+rect.height, rect.x+rect.width-d*2, rect.y+rect.height);
g2.drawLine(rect.x+rect.width, rect.y+rect.height, rect.x+rect.width, rect.y+rect.height-d);
}
3.蒙版层
这是最上边的类似于蒙版的一层,通过两张上下透明的图片将其放置在scrollerPane的最上边一层
if(top){
image = TWaverUtil.getImageIcon("/demo/layout/images/mist1.png");
}else{
image = TWaverUtil.getImageIcon("/demo/layout/images/mist2.png");
}
JComponent canvas = new JComponent(){
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image.getImage(), 0, 0, image.getIconWidth(), image.getIconHeight(), null);
}
};
蒙版层上也是有动画效果的,当鼠标点击上或下的蒙版,组件面板会自动上移或下移一个
4.最终叠加效果
这样两张图片一叠加就可以得到我们最开始提供的那种图了。
是不是有点像用PS软件在画图,呵呵,对了,这就是twaver swing中图层的作用。
PS:附上源Demo代码供大家学习分享:TopoDemo
- 大小: 352.2 KB
- 大小: 12.7 KB
- 大小: 34.5 KB
- 大小: 47.8 KB
- 大小: 3.7 KB
- 大小: 226.2 KB
- 大小: 6.2 KB
- 大小: 311.7 KB
- 大小: 50.3 KB
- 大小: 2.1 KB
- 大小: 108.1 KB
- 大小: 450.3 KB
- 大小: 485.8 KB
- 大小: 407.5 KB
分享到:
相关推荐
Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面设计和动画制作教程+实例Swing精美界面...
swing制作的精美记事本,界面仿苹果。可以拿去参考和使用
本系统——"用Swing制作的简单图书管理系统"就是基于这一强大的库构建的。下面我们将深入探讨该系统的设计理念、主要功能以及Swing在其中的关键应用。 一、Swing基础与应用 Swing是Java Foundation Classes (JFC)的...
在这个“Swing制作的QQ界面”项目中,开发者使用Swing构建了一个类似腾讯QQ的聊天应用界面。 `TestWindow.java`是压缩包中的关键文件,通常它会包含整个应用的主要窗口或主类。这个类可能是程序的入口点,负责初始...
本示例中,我们关注的是“使用Swing制作的向导页面”,这是一种常见的用户交互模式,用于引导用户逐步完成复杂任务或提供一系列设置。向导页面通常由多个步骤组成,每个步骤都包含特定的信息输入或选择,用户按顺序...
总之,这个“用Swing做的图片浏览器的项目”涵盖了Swing组件的使用、GUI设计、XML数据处理以及可能的网络编程,是一个综合性的Java桌面应用开发案例。通过学习和分析这个项目,开发者可以提升在Swing应用开发上的...
Swing动态加载曲线图在Java开发中是一种常见需求,特别是在数据可视化或...总之,Swing动态加载曲线图的实现涉及Swing组件、绘图API和定时器的使用。通过理解这些基本概念,开发者可以创建出功能丰富的数据可视化应用。
在本项目中,"用AWT Swing制作的登录注册页面,连接MySQL",开发者创建了一个使用这两种技术的简单应用,允许用户进行登录和注册操作,并将数据存储在MySQL数据库中。这为Java初学者提供了了解如何结合使用这些技术...
在这个场景中,我们讨论的是一个使用Java Swing开发的时钟应用,该应用具备设置时间、显示分针、时针和秒针的功能。 首先,我们需要了解Swing中的主要组件。在创建这个时钟应用时,可能没有直接的"时钟"组件,...
在这个特定的问题中,我们需要使用Swing来创建一个图形界面,展示用户输入文件中字母的频率统计,以柱状图的形式呈现。以下是实现这一功能所需的关键知识点: 1. **Swing组件**: - `JFrame`:作为应用程序的主...
使用JFreeChart创建柱状图,首先需要创建`CategoryDataset`,然后用它来构建`JFreeChart`对象,最后在`ChartPanel`上显示: ```java CategoryDataset createDataset() { // 创建数据集 } JFreeChart create...
用swing实现的制作(ERP)报表;很好很简单方便!
以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 工具包中所有的包都是以swing作为...
HoneyViewer图片查看器是一个基于java Swing实现的图片查看器,主要实现了图片展示功能。 本实验手册根据需求完成图片读取、切换等功能,平台的全称为:基于java Swing实现的HoneyViewer图片查看器(后简称为: Keep-...
这篇博客“用Swing实现的一个秒表”展示了如何利用Swing组件创建一个功能完备的计时器应用,这对于学习Java GUI编程或者需要开发类似工具的开发者来说非常有价值。下面将详细介绍这个项目中的关键知识点。 1. **...
Java Swing 制作多行滚动歌词显示控件 ...Java Swing 制作多行滚动歌词显示控件需要使用到多种技术和组件,包括领域模型、Java Swing 组件、布局管理、事件处理、图形用户界面设计、多线程编程和调试技术等。
【标题】"使用Velocity Swing制作的代码生成工具"是一个基于Java Swing界面和Velocity模板引擎的实用程序,旨在帮助开发者快速生成符合特定规范的代码。这个工具允许用户自定义模板,以适应不同的编程语言和框架,...
总的来说,这个“精美Swing 折叠菜单”项目展示了如何使用Java Swing组件和事件处理机制来创建一个模仿Windows XP风格的折叠菜单,同时也展示了自定义绘图和动画效果在GUI设计中的应用。对于学习Java Swing和GUI编程...
【Swing制作的账务管理系统】是一个基于Java Swing技术开发的简单财务软件,主要用于个人或小型企业进行日常账目记录和管理。Swing是Java的一个图形用户界面(GUI)工具包,它提供了丰富的组件和功能,使得开发者能够...