你有没有经历过装修?尽管它是件劳神费力的事,可现代人还是不遗余力地在装修上花尽心思。毕竟,在这个视觉支配感观的时代里,谁会嫌自己家太漂亮呢?今天,就让我们秉着精益求精的完美主义精神,在上次已经完成的游戏界面里再做一番细致的装饰,将装修进行到底!

JDialog增强型对话框窗口

还记得我们最初做的“关于”功能吗?虽然“关于”对话框能很好工作,但当你要写比较长或者是比较复杂的内容时,就会感觉到JOptionPane有些捉襟见肘.

让我们用JDialog来制作漂亮的对话框吧!JDialog和JFrame一样同属顶层容器控件,使用方法JPanel几乎一样。下面先来看看我们的第一个JDialog小程序吧:

public class AboutDialog extends JDialog {

JLabel about = new JLabel("关于:这可是JAVA写的连连看哦!");

public AboutDialog(JFrame frame) {

this.setTitle("About");

this.setSize(320, 200);

about.setHorizontalAlignment(SwingConstants.CENTER);

this.getContentPane().add(about, BorderLayout.CENTER);

this.show();

}

}

然后将主程序中的“关于”部分的代码修改如下:

if (e.getSource() == about) {

new AboutDialog();

return ;

}

现在运行看看,是不是大气多了?当然,现在的样子仍稍嫌简陋了一点,所以还得再接再励。这里告诉大家一点小技巧:如果在程序中加入了

JDialog.setDefaultLookAndFeelDecorated(true),对话框窗口的显示就会使用Java的外观风格,会比原来的

对话窗口漂亮得多!需要注意的是,当使用了Java观感后,对话框右上角的关闭按钮就不会显示出来,因此得自己加上“关闭”按钮及关闭窗口的事件处理。

自己动手试试,你能做出和我一样漂亮的对话框吗(见图1)?

图1:漂亮的对话框

黄糖故事

模态窗口和非模态窗口

Windows中,我们常常会接触到模态窗口和非模态窗口。所谓模态窗口,就是指当前窗口弹出时,只有关闭此窗口才能继续进行其它窗口的操作。非模态窗口

则是即使不关闭当前的窗口,也可以对后面的的窗口进行操作。最典型的例子就是Windows

中自带的“记事本”软件,“字体”功能就是模态窗口,而“查找”功能就是非模态窗口了。

在JDialog中,我们可以用JDialog(Frame owner, boolean modal)来指定对话框的模态或非模态状态。

在控件上使用HTML标签

大多数的Swing控件可以显示文字,对于这些控件,在一般情况下,只能使用单一字体、单一样式、单一颜色来显示。比如说,当要在标签JLabel控件

上显示文件时,我们会用到JLabel的setFont()、setForeground()等方法,并且代码看起来会是这样:

label = new JLabel("A label");

label.setFont(new Font("Serif", Font.PLAIN, 14));

label.setForeground(new Color(0xffffdd));

如果想在某段文字中使用不同的字体或颜色,其实可以使用HTML格式。在控件上使用HTML格式确实是一件令人兴奋的事情,我们只需要简单的将标记写在控件中就行了,比如可以这样创建一个JLabel:

JLabel label = new JLabel("RED");

然而,直到JDK 1.4.2,并非所有的控件都可以使用HTML格式,在SUN的官方文档中提到:支持HTML格式的控件只有按钮、菜单、标签、提示、标签面板、树和表格。无论如何,这都是一个非常好用的特性!

强劲的编辑器控件JEditorPane

上面说到了HTML格式,HTML格式使得Swing控件显示文字的能力增加了不少,然而,如果要进行图文混排的显示,HTML格式也无能为力了。

网络让世界变得精彩,互联网中各式各样的网站都与HTML分不开,就算不懂HTML,也可以使用Word、FrongPage等工具制作出漂亮的网页来。因此,如果能够将网页在控件中显示出来,那就解决了不少问题。

JEditorPane是Swing中一款非常强大的文本编辑控件,如果想完全了解JEditorPane的用法,绝不是简简单单的一两篇教程能说讲完

的,大家如果有兴趣,可以看看Java安装目录下demo\jfc\Stylepad下的演示程序,它可以告诉你JEditorPane有多么强大。

JEditorPane中,我们完全可以将HTML文件(或写字板等文字处理软件生成的RTF格式的文件)直接显示出来,虽然它还不能完整地支持HTML

的所有标准。因此,大家在制作页面的时候,尽可能的只使用HTML3.2标准的语法而不要使用CSS、JavaScript等特性。

如何让JEditorPane显示HTML文件呢?最简单的做法就是:

JEditorPane EditorPane= new JEditorPane();

URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();

URL url = urlLoader.findResource("doc/help.htm");

EditorPane.setEditable(false);

EditorPane.setPage(url);

我们首先使用setEditable(false)语句使JEditorPane中的内容不可编辑,然后再使用setPage(url)方法载入需要显示的HTML文件。

不仅如此,JEditorPane还可以处理HTML中的链接,做法也非常简单。首先,要使JEditorPane能够响应点击链接的事件,我们需实现HyperlinkListener接口。然后,我们为JEditorPane添加超链接的监听:

HelpPane.addHyperlinkListener(this);

最后,我们再实现监听链接事件的处理:

public void hyperlinkUpdate(HyperlinkEvent e) {

if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {

JEditorPane pane = (JEditorPane) e.getSource();

if (e instanceof HTMLFrameHyperlinkEvent) {

HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e;

HTMLDocument doc = (HTMLDocument) pane.getDocument();

doc.processHTMLFrameHyperlinkEvent(evt);

} else {

try {

pane.setPage(e.getURL());

}

catch (Throwable t) {

t.printStackTrace();

}

}

}

}

只需要简单的三个步骤,我们就可以享受JEditorPane带来的处理HTML页面的好处,做出漂亮的帮助文档了(见图2)。

图2:漂亮的帮助文档

改变鼠标光标的样式

目前为止,我们在程序界面上已经花了很多功夫,界面也慢慢变得漂亮起

来。不过,装饰永无止境,下面就来谈谈如何改变鼠标光标的样式吧。实际上,createCustomCursor(Image cursor,

Point hotSpot, String

name)就能满足要求。其中,cursor是要设置为光标的图片,hotSpot是图片显示在实际光标位置的位移,name是给光标起的名字。现在挑选

一张自己喜欢的图片来作为程序的光标吧(见图3)。

图3:自定义光标

如果仍然觉得意犹未尽,那么还可以制作动画光标。首先准备好一系列图片,然后使用Timer()方法来设置一个定时器,每隔一段时间就变换光标的图片,这样,光标不就动起来了?

声音

声音是Swing的一部分吗?回答是否定的。虽然声音不属于Swing,但为了让我们的游戏更加完美,还是一起来看看怎样处理声音吧。

Java自出道之日就能处理声音,但那时只能在Applet中进行处理,即便如此,声音的格式也只能是少见的AU格式。幸好,SUN意识到了这个问题,在JDK1.3之后,Java就提供了专门的声音处理包来满足声音处理的需求。

Java支持MIDI和WAV格式的声音文件,javax.sound.midi和javax.sound.sampled这两个包就是用来处理

MIDI和WAV文件的。MIDI格式优点在于文件小,缺点是只能保存乐曲而无法包含波形声音信息,WAV格式虽然能包含波形声音信息,可惜文件太大。因

此,我们可以将MIDI作为游戏背景音乐,WAV作为音效。

由于对WAV格式文件的操作和MIDI格式文件的操作十分相似,他们的区别仅在于使用的包不同,因此,我们就以处理MIDI格式的文件为例子吧:

// 读取midi文件

public void loadMidi(String filename) throws IOException, InvalidMidiDataException {

URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();

URL url = urlLoader.findResource(filename);

sequence = MidiSystem.getSequence(url);

//sequence保存着MIDI的音序结构

}

// 播放sequence

public void play() {

if (isPlaying) { // 如果已经在播放,返回

return;

}

try {

sequencer = MidiSystem.getSequencer();

sequencer.open();

sequencer.setSequence(sequence); // 加载sequence

sequencer.addMetaEventListener(this); // 添加事件处理

} catch (InvalidMidiDataException ex) {

} catch (MidiUnavailableException e) {

}

// Start playing

thread = new Thread(this);

thread.start();

}

public void run() {

Thread currentThread = Thread.currentThread();

while (currentThread == thread && !isPlaying) {

// 当MIDI没有播放的时候,播放MIDI音乐

sequencer.start();

isPlaying = true;

try {

thread.sleep( 1000l );

}

catch (InterruptedException ex) {

}

}

}

以上是处理MIDI文件的主要代码,代码并不是很长,却已经能很好地完成我们需要的功能了。当然,如果你还不满意,Java也提供了多种方法让你对

MIDI格式的文件进行音调、频率的改变。需要提醒的是,声音处理一定要做为一个单独的线程来进行,究其原因嘛,还是大家自己思考一下了。

结束语

至此,我们的连连看已经成为一道色香俱全的美味佳肴了,虽然游戏中还有很多的技术没有讲解到,然而,作为一个Swing教程,相信对大家也会有所帮助的。

不知道这样的教程是否能够让大家完成连连看这个游戏,如果你有困难或者疑问的话,可以通过leftmoon@163.com与我联系,或者将你感兴趣的

部分告诉编辑吧,我会将自己所知道部分的拿出来与大家共同探讨。在此我衷心感谢大家能够耐心将Swing这杯咖啡品完,谢谢大家的支持,欢迎大家随时光临

我们的咖啡馆哦!

java swing实现图文混排_跟我学Java Swing之游戏设计(4)相关推荐

  1. mysql图文混排设计方案_《图文混排》教学设计方案

    一.学科:信息技术 二.课程背景 课程取自于高等教育出版社<计算机应用基础>(windows xp + office2003)第4章<文字处理软件应用>第5节<图文表混和 ...

  2. TextView图文混排,显示添加的图片,三种常用方法,亲测

    图文混排,文字就不说了,主要是显示图片的方法 1.TextView使用ImageSpan显示图片 [java] view plaincopy <span style="font-siz ...

  3. Android中实现不同文字颜色和图文混排的Span总结

    一.怎么在TextView中设置首行缩进两个字符 在string资源文件中,在文字的前面加入"\u3000\u3000"即可实现首行缩进 在Java代码中,使用setText(&q ...

  4. python 输出结果图文混排_div css图文混排列表设计中的基础问题总结

    最近业务需要,想设计一个比较通用的图文混排的列表.结果设计的过程中遇到了不少问题,虽然都是一些css设计中比较基础的问题,但是自己认为有必要总结下,希望可以帮到一些css设计的初学者,同时也想扩大下自 ...

  5. Android 图文混排 通过webview实现并实现点击图片

    在一个开源项目看到是用的webview 实现的 1. 这是在asset中的一个模板html <html> <head> <title>News Detail< ...

  6. android论文引用图片,Android自动解析html带图片,实现图文混排

    在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法: Java textView.setText(Html.fromHtml(content)) ...

  7. 仿微信表情输入键盘(支持 Gif 表情图文混排 )

    作者 | PandaQ404 地址 | http://www.jianshu.com/p/fddca2b0a26b 声明 | 本文是 PandaQ404 原创,已获授权发布,未经原作者允许请勿转载 简 ...

  8. mysql emoy表情_GitHub - PandaQAQ/PandaEmoView: emoji gif 表情图文混排,仿微信表情输入...

    该库具有以下特点: 支持 emoji 表情图片 支持 gif 动态表情输入显示 支持单张贴图表情(与微信收藏表情一致) 支持题图表情库的添加删除 效果图: 快速使用 引入库 compile 'com. ...

  9. 自定义UI 简易图文混排

    系列文章目录 自定义UI 基础知识 自定义UI 绘制饼图 自定义UI 圆形头像 自定义UI 自制表盘 自定义UI 简易图文混排 自定义UI 使用Camera做三维变换 自定义UI 属性动画 自定义UI ...

最新文章

  1. OpenCV支持中文字符输出实现
  2. JS nodeType返回类型
  3. Tomcat配置server.xml
  4. 【转】数据结构与算法(上)
  5. 自己也遇到了-db_recovery_file_dest_size 修改大一点
  6. value toDF is not a member of org.apache.spark.rdd.RDD[People]
  7. 存根类 测试代码 java_嘲弄和存根–了解Mockito的测试双打
  8. 基于(7, 5)归零非删余Turbo码的参数识别与分析
  9. Go语言init函数你必须记住的六个特征
  10. 技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用
  11. 对比鸿蒙,Google 的 Fuchsia 当前进度如何?
  12. 基于XML的ASP留言板
  13. 电子游戏销售数据分析
  14. java编译网络爬虫_自己动手做网络爬虫系列——1 | 学步园
  15. CRM-数据权限设计
  16. 想要Linux上云?如何实现Linux工作流上云部署
  17. 10.8.8.8柠檬wifi网页登录_20.5.24—0元Kindle补货了!速度上车!
  18. 数字图像处理01:imadjust函数的Pyhton实现
  19. 压缩文件zip怎么查看注释呢,市场上一些破软件不好用啊,我有秘诀
  20. 三、队列:优先队列+循环队列(击鼓传花算法)

热门文章

  1. shiro的基本认识
  2. SpringSecurity原理:探究SpringSecurity运作流程
  3. python伪随机数模块random详解
  4. 如何运行linux中的vi,如何在linux中vi使用方法
  5. python中的platform模块获取平台信息
  6. 学习TypeScrip1(基础类型)
  7. android访问win10共享文件夹,手机怎么用ES浏览器访问Win10共享文件教程
  8. Nginx控制IP(段)的访问策略配置
  9. CC00307.CloudKubernetes——|KuberNetes运维.V27|——|监控.v04|PromQL查询_运算符|
  10. web自动化测试之Selenium基础 — XPath定位大全