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

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

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)/p>

图2:漂亮的帮助文档

改变鼠标光标的样式

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

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

Point hotSpot, String

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

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

dbaad7d88a61dabf46ab054479137d41.png

图3:自定义光标

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

声音

声音是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与我联系,或者将你感兴趣的

我们的咖啡馆哦!

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92563 人正在系统学习中 相关资源:凯利公司 KDZ 系列有刷串励、永磁、他励电机控制器设置软件.rar

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月15日
下一篇 2021年1月15日

相关推荐