在New选项中的Application中,有三个选项,第一个是Windows Application,这就是使用微软自带类库进行WFC程序的界面设计应用程序,第二个选项是 Console Application 这是DOS下的程序设计,没有界面要求,只要完成核心代码要求就可以了,不必设计界面,当然也用不着WFC类库了。第三个选项为"Application Wizard"这个选项功能就是应用程序设计向导了,只要你照着它说的做,一步一步往下走,就可以了,用这个向导设计出来的程序,具有很好的界面,一说到界面,当然就也用了WFC,这也不在我的讨论只列了。给大家举一个DOS下的应用程序的例子,在上图中,我们选择Console Application,填好名字与路径之后,点击 确定按钮,VJ6就会自动帮你生成一些格式化的代码,如下: /** * This class can take a variable number of parameters on the command * line. Program execution begins with the main() method. The class * constrUCtor is not invoked unless an object of type ´Class1´ * created in the main() method. */ public class Class1 { /** * The main entry point for the application. * * @param args Array of parameters passed to the application * via the command line. */ public static void main (String[] args) { // TODO: Add initialization code here } } 它前面的"/**"与"*/"之间的说明性语句一大堆,告诉你一些基本的内容,基本上不用理会,在主函数"main"中,有一个TODO,那就是我们要加入代码的地方了,我们就加入一个例子说明一下,在TODO下一行,我们键入一行“System. out. println ("Hello!");”(请注重大小写),假如你学过C或者JAVA的话,那就知道是什么意思了,这个程序是一个最基本的HELLO程序,在输入的时候要注重到它的自动补偿功能,当你敲完System后,再敲一个点时,后面就会出现一个下拉选择框,你再敲一个"o"的时候,选择项就自动停在了"out"选项上面。这时候只要按一下空格,就可以看到"out"三个字母已经自动输入了,当你再敲一个点的时候,同样又会出现一个下拉选择框,按下"p"字母后,选择项就停留在了以"p"开头的选项上,按下方向键的向下键,找到"println"按下空格,就会自动补偿输入了。同理,当你此时按下"("时,就有一个选择项提示,1 of 10,后面是方法,表示这是10种方法中的第一种方法,按下方向键的向下或者向上键,就可以看到不同方法的提示了,每种提示中都有参数的个数,参数的类型等提示,非常的方便快捷,使你的输入一般不会出现语法错误。(这要求你已经打开了自动补偿功能,假如没有打开,请参看前面打开的方法)假如你不小心输入错了,则在最下面的浮动窗口"Task List"中,会用红色的下化线显示你的输入有问题,或者是蓝色的警告。
/** * This class can take a variable number of parameters on the command * line. Program execution begins with the main() method. The class * constructor is not invoked unless an object of type ´Form1´ is * created in the main() method. */ public class Form1 extends Form { public Form1() { // Required for Visual J++ Form Designer support initForm();
// TODO: Add any constructor code after initForm call }
/** * Form1 overrides dispose so it can clean up the * component list. */ public void dispose() { super.dispose(); components.dispose(); }
/** * NOTE: The following code is required by the Visual J++ form * designer. It can be modified using the form editor. Do not * modify it using the code editor. */ Container components = new Container(); Edit edit1 = new Edit(); Edit edit2 = new Edit(); Button button1 = new Button();
/** * The main entry point for the application. * * @param args Array of parameters passed to the application * via the command line. */ public static void main(String args[]) { Application.run(new Form1()); } }
这个窗口里面有三个选项了,假如你用过Frontpage,那么你将对这个非常的熟悉。这里就像Frontpage一样,是一个网页编辑器,工具箱中也有你编辑网页所要的控件。不用多解释,看看Source(源代码),打开后,有的可能显示的是该Applet的内容。而有的可能显示的是代码,这与VJ6的初始设定有关,在Applet上面点击鼠标右键,选择“Always view as text”后,就可以看到代码了,代码如下:
<applet code=Applet1.class name=Applet1 width=320 height=200 VIEWASTEXT> <param name=label value="This string was passed from the HTML host."> <param name=background value="008080"> <param name=foreground value="FFFFFF"> </applet>
Font ft; //文字字体对象实例 String theString, font, style; //移动的字符串、字体类型及样式 int size, speed; //文字的大小,移动速度 int xSet, Max, Min;//文字所在位置的x坐标,右边界和左边界
定义好变量后,就要像给出的源代码一样,加入一些初始的代码了。
private final String param_string="string"; private final String param_font="font"; private final String param_style="style"; private final String param_size="size"; private final String param_speed="speed";
public void paint(Graphics g) { int ySet=getSize().height ;//yset为输出字符串的y坐标变量 ySet=(ySet-size)/2; g.setFont (ft); g.setColor (Color.red); g.drawString (theString,xSet,ySet+40); //+40是用来调整输出时的高度用的。 xSet--; if(xSet }
public Thread TextMoveRunnable=null; public void start() { if(TextMoveRunnable==null) { TextMoveRunnable=new Thread (this); TextMoveRunnable.start (); } } public void run() { while(true) { try{ repaint();Thread.sleep (speed); }catch(InterruptedException e) {} } } public void stop() { if (TextMoveRunnable!=null) { TextMoveRunnable.stop(); TextMoveRunnable=null; } }
这部分代码应该加在与initForm()并列的地方,可以在之前,也可以在之后。在加完这些代码之后,程序的大体就完成了。但假如你此时编译的话,肯定会出现错误,在Task List上会显示出来,并且错误为“Class ´Thread´ doesn´t have a constructor that matches ´Thread(Applet1)´ (J0082)”这是因为加进去的代码涉及到了线程,而主程序不知道,没有相应的接口,(J0082)为错误的序号,查找相应的工具,有这个错误的具体解释。要解决这个错误,只要在主类后面加上一个接口就可以了。如下:
public class Applet1 extends Applet implements Runnable
/** * This class reads PARAM tags from its HTML host page and sets * the color and label properties of the applet. Program execution * begins with the init() method. */ public class Applet1 extends Applet implements Runnable { /** * The entry point for the applet. */ Font ft; //文字字体对象实例 String theString, font, style; //移动的字符串、字体类型及样式 int size, speed; //文字的大小,移动速度 int xSet, Max, Min;//文字每次移动的位移量,右边界和左边界
public void init() { initForm();
usePageParams();
// TODO: Add any constructor code after initForm call. }
private final String labelParam = "label"; private final String backgroundParam = "background"; private final String foregroundParam = "foreground"; private final String param_string="string"; private final String param_font="font"; private final String param_style="style"; private final String param_size="size"; private final String param_speed="speed";
/** * Reads parameters from the applet´s HTML host and sets applet * properties. */ private void usePageParams() { final String defaultLabel = "Default label"; final String defaultBackground = "C0C0C0"; final String defaultForeground = "000000"; String labelValue; String backgroundValue; String foregroundValue;
/** * Read the , * , * and tags from * the applet´s HTML host. */ labelValue = getParameter(labelParam); backgroundValue = getParameter(backgroundParam); foregroundValue = getParameter(foregroundParam);
if ((labelValue == null) (backgroundValue == null) (foregroundValue == null)) { /** * There was something wrong with the HTML host tags. * Generate default values. */ labelValue = defaultLabel; backgroundValue = defaultBackground; foregroundValue = defaultForeground; }
/** * Converts a string formatted as "rrggbb" to an awt.Color object */ private Color stringToColor(String paramValue) { int red; int green; int blue;
red = (Integer.decode("0x" + paramValue.substring(0,2))).intValue(); green = (Integer.decode("0x" + paramValue.substring(2,4))).intValue(); blue = (Integer.decode("0x" + paramValue.substring(4,6))).intValue();
return new Color(red,green,blue); }
/** * External interface used by design tools to show properties of an applet. */ public String[][] getParameterInfo() { String[][] info = { { labelParam, "String", "Label string to be displayed" }, { backgroundParam, "String", "Background color, format "rrggbb"" }, { foregroundParam, "String", "Foreground color, format "rrggbb"" }, }; return info; }
Label label1 = new Label();
/** * Intializes values for the applet and its components */ void initForm() { this.setBackground(Color.lightGray); this.setForeground(Color.black); label1.setText("label1"); this.setLayout(new BorderLayout()); this.add("North",label1); }
public void paint(Graphics g) { int ySet=getSize().height ; ySet=(ySet-size)/2; g.setFont (ft); g.setColor (Color.red); g.drawString (theString,xSet,ySet+40); //+40是用来调整输出时的高度用的。 xSet--; if(xSet }
public Thread TextMoveRunnable=null; public void start() { if(TextMoveRunnable==null) { TextMoveRunnable=new Thread (this); TextMoveRunnable.start (); } } public void run() { while(true) { try{ repaint();Thread.sleep (speed); } catch(InterruptedException e) {} } } public void stop() { if (TextMoveRunnable!=null) { TextMoveRunnable.stop(); TextMoveRunnable=null; } } }
5 修改HTML内的代码:
<applet code=Applet1.class name=movetext width=400 height=100 VIEWASTEXT> <param name=label value="This string was passed from the HTML host."> <param name=background value="008080"> <param name=foreground value="FFFFFF"> <param name=string value="你好, 这是一个例子!"> <param name=font value="宋体"> <param name=style value=BOLD> <param name=size value=40> <param name=speed value=20> </applet> 当你设置好这些后,应该是没有什么问题了吧。此时按下F5键,在弹出的默认浏览器内,你将看到这个例子的效果了。怎么样,没有骗你吧!好了,到此,Applet的编写与编译的全部过程你应该把握了吧。