??xml version="1.0" encoding="utf-8" standalone="yes"?>22288色视频在线观看,精品乱码亚洲一区二区不卡,精品国产一区二区三区四区四http://www.aygfsteel.com/shmily432685/category/4004.htmlzh-cnWed, 28 Feb 2007 04:32:11 GMTWed, 28 Feb 2007 04:32:11 GMT60利用Java Swing 实现游戏开?http://www.aygfsteel.com/shmily432685/archive/2005/10/20/16177.html闉|闉|Thu, 20 Oct 2005 10:05:00 GMThttp://www.aygfsteel.com/shmily432685/archive/2005/10/20/16177.htmlhttp://www.aygfsteel.com/shmily432685/comments/16177.htmlhttp://www.aygfsteel.com/shmily432685/archive/2005/10/20/16177.html#Feedback0http://www.aygfsteel.com/shmily432685/comments/commentRss/16177.htmlhttp://www.aygfsteel.com/shmily432685/services/trackbacks/16177.htmlSwing初体?/STRONG>

  对于惛_?fn)Swing~程的朋友,我们特地为大家准备了(jin)一些小H门。首先,下蝲qM码是极有必要的。由于这是一关于Swing的教E,所以,我们只是可能讲解一些与Swing有关的内容,与Swing无关的内容一般不?x)涉及(qing),例如法部分。其ơ,受篇q限Ӟ也不可能在这里将每部分代码都写得完完整整的,所以,大家也需要对照完整代码来看。最后,Z(jin)使大家更Ҏ(gu)把精力集中在Swing学习(fn)上,我们也将游戏开发中所需资源攑֜下蝲文g中,大家下蝲后便能够~译q行Q看到执行结果。(下蝲游戏源文Ӟ(j)

  1.层容器

  什么是层容器Q当我们使用Javaq行囑Ş~程的时候,囑֜哪里l制呢?我们需要一个能够提供图形绘制的容器Q这个容器就被称为顶层容器,你也可以把它惌成一个窗口。顶层容器是q行囑Ş~程的基Q一切图形化的东西,都必然包括在层容器中。在Swing中,我们有三U可以用的层容器Q它们分别是:

  ·JFrame:用来设计cM于Windowspȝ中的H口形式的应用程序?
  ·JDialog:和JFramecMQ只不过JDialog是用来设计对话框?
  ·JApplet:用来设计可以在嵌入在|页中的Java程序?

  如果需要用Swing制作一个窗口类E序Q我们的代码看v来应该是q样:

import javax.swing.*;

public class KyodaiUI
extends JFrame {
…?BR>}

  2.控g

  控g是构成应用程序界面的基本元素Q按钮、文本框、进度条{,q些都是控g。控?q里我们只讨论可视化控g)又可以分为容器控件和非容器控件。从字面意义上来理解Q容器控件就是能包含其他控g的特D控Ӟ例如QJava中的JPanel控g属于容器型控gQ我们可以在JPanel中放|按钮、文本框{非容器控gQ你甚至可以在JPanel中再攄若干个JPanel控g(值得注意的是Q顶层容器也是容器型控gQ每一个窗口应用程序中有且只能有一个顶层容器控Ӟ换句话说Q顶层容器不能包括在其他的控件中)?BR>
  Java中的容器控g有很多,除刚才提到的JPanel外,q有JTabbedPane、JScrollPane{,非容器控件有JButton、JLabel、JTextField{。如果你需要向某个容器型的控g中添加控Ӟ你可以?add(Component comp) Ҏ(gu)来实玎ͼ?

JPanel panel = new JPanel();
JButton button = new JButton();
panel.add(button);

  3.布局

  什么是布局Q布局是Java中用来控制控件排列位|的一U界面管理系l。用过其他可视化编E开发语a的h在初ơ接触Java界面设计ӞM(x)感觉到Java界面设计很别?居然没有提供所见即所得的讄控g坐标的方法!然而,事实证明QJava本n提供的布局理pȝ也一栯够出色地完成我们的需要,而且在跨q_时表现得更有优势?BR>
  常用的布局?

  ·BorderLayout:界面分割ؓ(f)上下左右以及(qing)中间一块区域的理pȝQ在BorderLayout布局中,最多你只能?个控Ӟ如果过5个控Ӟq是选用其他的布局pȝ吧?

  ·GridLayout:GridLayout是将用户界面切割为棋盘一L(fng)布局理pȝ。如果我们要设计一个类gWindows中自带的计算器YӞGridLayout无疑是最佳选择?

  ·FlowLayout:FlowLayout与上qCcd局理pȝ不太一P在FlowLayout中,你不必指定每个控件放在哪Q你只需要把控g加入到FlowLayout中,FlowLayout׃(x)Ҏ(gu)你添加控件的序依次攄控gQ如果空间不够,?x)自动换行?BR>
  在对q几个布局理pȝ有了(jin)基本认识后,我们׃hq入界面设计吧。在仔细观察?jin)QQ游戏中“连q看”的讑֮后,我们可以发现Q整个界面分Z个区Q顶部是pȝ菜单区,占地面积最大的是用h戏区Q另外还有一个用户交互区Q每个区域中都由若干控gl成?BR>
  q么多控Ӟ我们从哪开始入手呢Q由于容器控件中可以攄其他控gQ因此,我们只需要先定攄的容器控件就可以?jin)?既然已经知道需要用容器控件的个数Q接下来让我们就q入布局理pȝ的选择。用GridLayoutQ似乎有点勉强,用FlowLayoutQ还有更好的选择吗?对了(jin)Q我想你一定想C(jin)是BorderLayout吧,如下?所C?BR>

  动手之前Q大家一定要注意的是Q界面的设计要先考虑好尺寸,不管是主E序界面的大还是每个区域的大小Q如果没有设计好合适的寸Q将来改动v来会(x)十分痛苦?BR>
  下面便是相应的源E序:

import java.awt.*;
import javax.swing.*;

public class KyodaiUI extends JFrame {
public KyodaiUI() {
this.setSize(780Q?500); //窗体的大小讑֮?80*500
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //H体不能改变大小
this.setTitle("q连?); //讄标题

JPanel toolBar = new JPanel();
toolBar.setBackground(Color.white);
toolBar.setPreferredSize(new Dimension(780Q?48));

  JPanel actionPanel = new JPanel(); //新徏JPanel型的控g
actionPanel.setBackground(Color.yellow); //讄背景?BR>actionPanel.setPreferredSize(new Dimension(160Q?380)); //讄大小

 JPanel contentPanel = new JPanel();
contentPanel.setBackground(Color.blue);
contentPanel.setPreferredSize(new Dimension(620Q?380));
this.getContentPane().add(toolBarQ?BorderLayout.NORTH);
this.getContentPane().add(actionPanelQ?BorderLayout.EAST);
this.getContentPane().add(contentPanelQ?BorderLayout.CENTER);
}

   public static void main(String[] args) throws HeadlessException {
KyodaiUI kyodaiUI = new KyodaiUI();
kyodaiUI.show();
}
}

  让我们来看看上面q段E序是如何运行的。首先,extends JFrame表明?jin)这是从JFrame中承过来的QJFrame是最基本的顶层容器控件。实际上Q在JDK中,以字母J打头的控仉是Swing控g。然后设|了(jin)容器的属性,其中QsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)是用来告诉Java虚拟机,当用L(fng)ȝ体右上角的“关闭”按钮时Q关闭该H口q程。如果不q么做的话,你会(x)发现虽然你可以点窗口关闭,然而程序却没有退出。在接下来的代码中,我们为顶层容器添加了(jin)三个Panel容器。要注意的是Q在AWT中,我们可以直接写ؓ(f)add(toolBarQ?BorderLayout.NORTH) Q而在 Swing 中却一定要写成getContentPane(). add(toolBarQ?BorderLayout.NORTH) Q否则程序就?x)出错?BR>
  现在大家可以攑֜~译q行看看Q是不是和我的运行结果一?见图3)Q?BR>

  4.Ҏ(gu)

  虽然我们使用?jin)不同前景色来区别不同的区域Q然而却没有层次感,加上Ҏ(gu)一定会(x)漂亮许多?BR>
  在Java中,所有以J打头的Swing控g都可以用setBorderҎ(gu)来ؓ(f)自己讄Ҏ(gu)。边框有很多U,U型、凸赗凹下、空的,你甚臛_以自q合Ş成个人风根{所有的Border都必M用javax.swing.BorderFactory中提供的?rn)态方法来创徏Q比?

Border border = BorderFactory.createBevelBorder(BevelBorder.LOWEREDQ?BR>new Color(45Q?92Q?162)Q?BR>new Color(43Q?66Q?97)Q?BR>new Color(45Q?92Q?162)Q?BR>new Color(84Q?123Q?200));


  现在Q我们将toolBar.setBackground(Color.white)改ؓ(f)toolBar.setBorder(border)Q立体效果是不是已经出现?jin)?BR>

  实战——写上自q大名

  现在我们已经有了(jin)一个能够运行的界面?jin),虽然它什么也做不?jin),但是请你别慌Q罗马不是一天徏成的?BR>
  现在让我们在菜单区提供一个“关于”菜单,用来昄E序的信息,N你不惌别h知道你的大名吗?Swing本n提供了(jin)现成的按钮控件JButtonQ我们只需要创Z个新的按?JButton about = new JButton("关于");q个按钮该怎么攑ֈ菜单不是别的地方呢Q我们可以加入下面的代码:toolBar.add(about);咦,怎么Ҏ(gu)钮没有反应?q是因ؓ(f)你还没有告诉E序点击按钮时要做什么事情呢。要为按钮添加事件响应,首先需要用about.addActionListener(this)来告诉程序监听按钮按下时的事Ӟ׃ActionListener是一个程序接口,因此Q我们在cȝx的地方也得做一点小的修改:public class KyodaiUI extends JFrame implements ActionListener {...}实现ActionListener接口是ؓ(f)?jin)告诉程序我要进行事件处理?jin)。当?dng)最后我们得d响应事g的代?

public void actionPerformed(ActionEvent e) {
if (e.getSource() == about) {
JOptionPane.showMessageDialog(thisQ?"我的大名"Q?"关于"Q?BR>JOptionPane.INFORMATION_MESSAGE);
return ;
}
}

  其中Qe.getSource() 表示当前触发事g的控Ӟ׃我们的程序中往往?x)有多个以上的控Ӟq些控g都有可能产生事gQ所以我们必M用这个方法来扑ֈ产生事情的控件?BR>
  

  让我们一h回顾一下今天所学的内容:首先我们?jin)解了(jin)顶层容器,也知道?jin)控g分ؓ(f)容器控g和非容器控gQ同时还知道使用Ҏ(gu)Q最后,我们q小的处理?jin)一下按钮的事g?BR>
  学而时?fn)之Q不亦说乎,p我留点小的作业Q帮助大家mZ下今天所学的内容:上面我们d的按钮在菜单栏的中间Qƈ不美观,请大家放到左Ҏ(gu)双试试?BR>
  最后向大家提供一些比较好的参考资?

  ●Creating a GUI with JFC/Swing
  http://java.sun.com/docs/books/tutorial/uiswing/index.html
  ?D Graphics
  http://java.sun.com/docs/books/tutorial/2d/index.html
  ●JDK API
  http://java.sun.com/j2se/1.4.2/docs/api/index.html



闉| 2005-10-20 18:05 发表评论
]]>
վ֩ģ壺 ƽ| | пѷ| Ѯ| | ɳ| ¸| ӱ| ƽ| | | | | | ˱| ʲ| º| | ߰| | ˮ| Ҿ| | ƽ| | | | | | ˮ| »| | ƴ| Դ| | Ĭ| | | | | |