java编程 完成下图所示的图形用户界面设计(窗口标题为你的真实学号及姓名,例如:11930670

java编程 完成下图所示的图形用户界面设计(窗口标题为你的真实学号及姓名,例如:11930670,第1张

好像是作业, 源代码发给你参考,  注意学习下代码  了解下布局 和按钮的工作原理

参考代码

import javaawt;

import javaawtevent;

public class MyRandomFrame extends Frame implements ActionListener {

private final TextField tf1;

private final TextField tf2;

private final TextField tf3;

public static void main(String[] args) {

new MyRandomFrame()setVisible(true);

}

public MyRandomFrame() {

setSize(600, 100);

setLocationRelativeTo(null);

setTitle("学号:XXXXX  姓名:张三");

Button but1 = new Button("获取1~100之间的随机数");

but1setActionCommand("随即");

but1addActionListener(this);

Label label1 = new Label("第一个数:");

tf1 = new TextField(5);

Label label2 = new Label("第二个数:");

tf2 = new TextField(5);

Button but2 = new Button("求和");

but2setActionCommand("求和");

but2addActionListener(this);

tf3 = new TextField(5);

setLayout(new FlowLayout());

add(but1);

add(label1);

add(tf1);

add(label2);

add(tf2);

add(but2);

add(tf3);

addWindowListener(new WindowAdapter() {// 关闭窗口

@Override

public void windowClosing(WindowEvent e) {

Systemexit(0);

}

});

}

@Override

public void actionPerformed(ActionEvent e) {

String command = egetActionCommand();

if (commandequals("随即")) {

int a = (int) (Mathrandom()  100);

int b = (int) (Mathrandom()  100);

tf1setText(StringvalueOf(a));

tf2setText(StringvalueOf(b));

} else if (commandequals("求和")) {

int x = IntegerparseInt(tf1getText());

int y = IntegerparseInt(tf2getText());

tf3setText(StringvalueOf((x + y)));

}

}

}

楼主你好,你的问题我3个礼拜前也有,现在已经解决了,给你我的解决经验

上优酷搜孙鑫VC++,找到他的20部教学视频

看到前5章,这时候估计你已经能编写图形界面小东西了。当然,前提是你得C++语言基础已经掌握好了,类的一些概念,什么虚函数啊之类的,你搞不懂可以先不搞,看完这些相信你就会对这些概念有个直观的理解了。。

其实我现在发现基础很重要,所以又回去钻研那些以前看的很枯燥的内容。

但是枯燥的内容学起来确实太无聊,所以可以先学点WINDOWS程序设计,再设计的过程当中,遇到问题了,可以再翻基础书巩固。

还有啥问题欢迎楼主追问哈~

可以是可以,但是那么做不值得,其实不管是Mac还是windows底层都是C,之所以能写出图形界面,是因为他们封装了很多很方便调用的库函数,Mac下也一样啊,Mac下的图形界面封装在cocoa里了,并不是windows下的C++的那一套库,语法之类都不一样,所以在Mac下写图形程序只能你自己写像素点了,会比较麻烦

界面设计原则总的来说可以概括成界面在用户的掌控之中、保持界面的一致性和减少用户记忆的负担这三大点,下面就给大家具体介绍一下界面设计原则

(一)界面设计原则(1)用户原则

人机界面设计首先要确立用户类型

划分类型可以从不同的角度,视实际情况而定

确定类型后要针对其特点预测他们对不同界面的反应

这就要从多方面设计分析

(2)信息最小量原则

人机界面设计要尽量减少用户记忆负担,采用有助于记忆的设计方案

(3)帮助和提示原则

要对用户的作命令作出反应,帮助用户处理问题

系统要设计有恢复出错现场的能力,在系统内部处理工作要有提示,尽量把主动权让给用户

(4)媒体最佳组合原则

多媒体界面的成功并不在于仅向用户提供丰富的媒体,而应在相关理论指导下,注意处理好各种媒体间的关系,恰当选用

(详见媒体的选择)ァ(二)界面分析与规范在人机界面设计中,首先应进行界面设计分析,进行用户特性分析,用户任务分析,记录用户有关系统的概念、术语,这项工作可与多媒体应用系统分析结合进行,囊括于用户分析报告里

(三)人机界面的类型任务设计之后,要决定界面类型

目前有多种人机界面设计类型,各有不同的品质和性能,下图进行了详细的描述

创造性地使用多媒体环境,将会使应用程序功能大大增强

要做到这一点,需从如下两方面考虑:(1)媒体的功能:没有任何一种媒体在所有场合都是最优的,每种媒体都有其各自擅长的特定范围,各种媒体功能参考如下:①文本:在表现概念和刻划细节时可用表现

②图形:擅长表达思想轮廓及蕴含与大量数值数据内的趋向性信息,在空间信息方面有较大优势

③动画:可用来突出整个事物,特别适于表现静态图形无法表现的动作信息

④视频影像:适于表现其它媒体所难以表现的来自真实生活的事件和情景

⑤语音:能使对话信息突出,特别是在于影像,动画集合时能传递大量的信息

⑥姿态与动作:在与别的媒体结合时具有较强的信息引用能力,可以在相关信息之间建立起时间、空间以及逻辑上的联系

(2)媒体选择的结合与互补:脚本设计可根据内容需要分配表达的媒体,这里要特别注意媒体间的结合与区别

提出几条原则如下:①人们在问题求解过程中的不同阶段对信息媒体有不同需要

一般在最初的探索阶段采用能提供具体信息的媒体如语音、图像等,而在最后的分析阶段多采用描述抽象概念的文本媒体

而一些直观的信息(图形、图像等)介于两者之间,适于综合阶段

②媒体种类对空间信息的传递并没有明显的影响,各种媒体各有所长

③媒体结合是多媒体设计中需要研究的新课题

媒体之间可以互相支持,也会互相干扰

多种媒体应密切相关,扣紧一个表现主题,而不应把不相关的媒体内容拼凑在一起

④目前,媒体结合在技术上主要通过在一个窗口中提供多种媒体的信息片段(空间结合)和对声音、语音、录相等随时间变化的动态媒体加以同步实现(时间序列组合)

⑤媒体资源并非愈多愈好,如何在语义层上将各种媒体很好的,结合以更有效地传递信息,是要很好地探索的研究课题,也是应用系统人机界面设计的关键问题

(四)界面设计原则中的用户心理学认知心理学,从广义上来说,就是关于认识的心理学

人类认识客观事物,主要就是通过感觉、知觉、注意、记忆、思维想象等来进行,因此,凡是研究人的认识心理过程的,都属于认识心理学

实际上,我们这里所指的认知心理学是指纯粹采用信息加工观点来研究认知心理学过程的心理学,也就是运用信息论以及计算机的类比、模拟、验证等方法来研究的的知识是如何获得、如何存贮、如何交换、如何取使用的

所以,我们这里所指的现代认知心理学实质是信息加工心理学

一般地,人们将信息加工心理学又称为狭义的认知心理学

1

认知过程看和听的过程构成知觉,图像和声音作为刺激的特征被接收并以抽象的方式被编码,把输入和记忆中的信息进行对比得出对刺激的解释,这一过程就是认知

人体信息处理器包括感官,短期记忆、长期记忆及与其相联系的动作处理器和认知处理器

每种知觉均有一个对应的短期存储器和处理器,人体信息模型总体框图如左图4

3

1所示

其中认知处理器执行的工作就是我们通常所说的思维

思维的结果或被存储起来,或送至动作处理器控制行动

2

认知心理学(1)现代认知心理学的核心:现代认知心理学的理论实质,就是以计算机信息加工的观点来研究人的心理学活动,把人脑看作是一种如同计算机的信息加工系统

(2)现代认知心理学两个关键的重要概念:现代认知心理学的学说内容集中体现在两个关键的重要概念上

现代认知心理学的一个重要的中心概念,就是“信息”

在某种程度上说,抽掉了“信息”的概念,认知心理学的理论也就会散架解体,难以存在

现代认知心理学的另一个重要的中心概念,就是“信息加工系统”

信息加工系统的理论,是现代认知心理学理论的主体

(3)现代认知心理学的研究方法:现代认知心理学的研究方法有实验法、观察法(包括自我观察法)以及计算机模拟法等

3

人机交互设计遵循的认知原则根据用户心理学和认知科学,提出了如下基本原则指导人机界面交互设计

(1)一致性原则

即从任务、信息的表达、界面控制作等方面与用户理解熟悉的模式尽量保持一致

(2)兼容性

在用户期望和界面设计的现实之间要兼容,要基于用户以前的经验

(3)适应性

用户应处于控制地位,因此界面应在多方面适应用户

(4)指导性

界面设计应通过任务提示和反馈信息来指导用户,做到“以用户为中心”

(5)结构性

界面设计应是结构化的,以减少复杂度

(6)经济性

界面设计要用最少的支持用户所必须步骤来实现

在界面设计原则指导下,提出以下几点针对界面设计与屏幕设计的参考:(1)由具体到抽象

即首先通过多媒体界面给用户提供具体的对象

然后从具体对象、内容中让学习者归纳出抽象的概念或原理,或用模拟系统来引导出抽象的原理

(2)由可视化的内容显示不可见的内容

尽可能利用数字、图解、动画、色彩等清晰爽目的对象显示原理、公式或抽象的概念

(3)由模拟引导创新

突出人机交互,尽量启发用户的积极思维和参与,并激起用户的学习和创造欲望

(4)合理运用再认与再忆,减少用户短期记忆的负担

所谓再认就是从系统给定的几个可能答案中要用户选择一个正确的或最好的

再忆即要求用户输入正确的答案或关键字

(5)考虑用户的个别差异,使用用户语言

以上五点具体体现了“由易而难,逐步强化

”这一源于认知心理学的原则

上文介绍的界面设计原则应该让大家心中对界面设计原则有了一定的认识,当然,因为界面设计是复杂的需要多学科参与的,心理学、语言学、设计学等学科都在里面占有重要作用

而用户界面是与程序交流的唯一方式,为了给用户提供最便捷的服务,界面设计原则是一定要遵守的

package heh;//我自己的包名

import javaawt;

import javaawtevent;

import javaxswingevent;

import javaxswing;

public class Jsq extends JFrame

{

Panel pan1=new Panel();

Panel pan2=new Panel();

Panel pan3=new Panel();

Panel pan4=new Panel();

Panel pan5=new Panel();

Label la1=new Label("欢迎使用计算器");

Button bt1=new Button(" ");

Button bt2=new Button("MC");

Button bt3=new Button("MR");

Button bt4=new Button("MS");

Button bt5=new Button("M+");

Button bt11=new Button("Backspace");

Button bt12=new Button("CE");

Button bt13=new Button("C");

Button but[]=new Button[20];

String buta[]={"7","8","9","/","sqrt","4","5","6","","%","1","2","3","-","1/x","0","-/+","","+","="};

JTextField t1=new JTextField("0");//swing组件,可以设置对齐方式

double a=0;//记录计算中的值或结果

String b="";//“+,-,,/”运算符号标记

int d=0; //是否刚刚按过运算符号标记

int x=0; //是否刚刚按过“=”号标记

int y=0; //屏幕刚刚出现过汉字的标记

public Jsq()

{

super("计算器");

add(pan1,BorderLayoutNORTH);

add(pan4,BorderLayoutCENTER);

add(pan3,BorderLayoutWEST);

pan3setLayout(new GridLayout(0,1,10,10));

pan3add(bt1);pan3add(bt2);pan3add(bt3);pan3add(bt4);pan3add(bt5);

pan4setLayout(new BorderLayout());

pan4add(pan5,BorderLayoutNORTH);

pan4add(pan2,BorderLayoutCENTER);

pan5setLayout(new GridLayout(1,3,5,5));

pan5add(bt11);pan5add(bt12);pan5add(bt13);

pan1setLayout(new GridLayout(3,1));

pan1add(la1);

pan1add(t1);

t1setEditable(false);//文本框设置为不可修改

t1setHorizontalAlignment(JTextFieldRIGHT);//设置文本框对齐方式

pan2setLayout(new GridLayout(4,5,10,10));

for(int i=0;i<20;i++)

{

but[i]=new Button(buta[i]);

pan2add(but[i]);

}

but[0]addActionListener(new A());

but[1]addActionListener(new A());

but[2]addActionListener(new A());

but[3]addActionListener(new A());

but[4]addActionListener(new A());

but[5]addActionListener(new A());

but[6]addActionListener(new A());

but[7]addActionListener(new A());

but[8]addActionListener(new A());

but[9]addActionListener(new A());

but[10]addActionListener(new A());

but[11]addActionListener(new A());

but[12]addActionListener(new A());

but[13]addActionListener(new A());

but[14]addActionListener(new A());

but[15]addActionListener(new A());

but[16]addActionListener(new A());

but[17]addActionListener(new A());

but[18]addActionListener(new A());

but[19]addActionListener(new A());

bt11addActionListener(new A());

bt12addActionListener(new A());

bt13addActionListener(new A());

bt1addActionListener(new A());

bt2addActionListener(new A());

bt3addActionListener(new A());

bt4addActionListener(new A());

bt5addActionListener(new A());

}

class A implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

if(egetSource()==but[0]) //"7"

{

if(x==1) //判断是否刚刚按过"="

{

t1setText("7");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{ //如果显示为"0"或"00"或者刚刚按过运算符号

t1setText("7"); //或者屏幕显示为汉字 那么显示为"7"

y=0;//将标记设置为0

}

else

t1setText(t1getText()+"7");//将显示的字符串后面加"7"

d=0;//将标记设置为0

if(t1getText()length()>40)//判断显示字符长度是否超过40

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[1]) //"8"

{

if(x==1)

{

t1setText("8");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("8");

y=0;

}

else

t1setText(t1getText()+"8");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[2]) //"9"

{

if(x==1)

{

t1setText("9");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("9");

y=0;

}

else

t1setText(t1getText()+"9");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[3]) //"/"

{

if(y==1) //判断显示的是否为汉字

{

t1setText("0");

y=0;

}

if(d==0) //判断是否刚刚按过运算符号 防止连续按运算符号产生错误

{

if(bequals("+"))//四则混合运算时 判断上次计算是否为"+"

{

a=a+DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("-"))//四则混合运算时 判断上次计算是否为"-"

{

a=a-DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals(""))//四则混合运算时 判断上次计算是否为""

{

a=aDoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("/"))//四则混合运算时 判断上次计算是否为"/"

{

double f=DoublevalueOf(t1getText())doubleValue();

if(f==0)//判断除数是否为0

{

t1setText("错误!请按“CE”清屏后继续计算");

y=1;

}

else

{

a=a/DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(bequals(""))//判断进行的是不是四则混合运算的第一次运算

{

a=DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(!t1getText()equals("错误!请按“CE”清屏后继续计算"))//是否出现了除数为零的错误

{

b="/";//运算符号标记设置为"/"

d=1; //标记已经按过运算符号

}

if(t1getText()length()>40)//判断显示字符长度是否超过40

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;//将记忆的数字抹去

b="";//运算符号标记 为未按过运算符号

d=0;//标记 刚刚没有按过运算符号

y=1;//标记 屏幕显示了汉字

}

}

if(egetSource()==but[4]) //"sqrt"

{

if(y==1)

{

t1setText("0");

y=0;

}

double f=DoublevalueOf(t1getText())doubleValue();

if(f<0) //判断被开放数是否小于零

{

t1setText("错误!被开方数小于0,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

else

{

f=Mathsqrt(f);

t1setText(""+(f));

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[5]) //"4"

{

if(x==1)

{

t1setText("4");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("4");

y=0;

}

else

t1setText(t1getText()+"4");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[6]) //"5"

{

if(x==1)

{

t1setText("5");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("5");

y=0;

}

else

t1setText(t1getText()+"5");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[7]) //"6"

{

if(x==1)

{

t1setText("6");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("6");

y=0;

}

else

t1setText(t1getText()+"6");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[8]) //""

{

if(y==1)

{

t1setText("0");

y=0;

}

if(d==0)

{

if(bequals("+"))

{

a=a+DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("-"))

{

a=a-DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals(""))

{

a=aDoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("/"))

{

double f=DoublevalueOf(t1getText())doubleValue();

if(f==0)

{

t1setText("错误!请按“CE”清屏后继续计算");

y=1;

}

else

{

a=a/DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(bequals(""))

{

a=DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(!t1getText()equals("错误!请按“CE”清屏后继续计算"))

{

b="";

d=1;

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[9]) //"%"

{

if(y==1)

{

t1setText("0");

y=0;

}

double f=DoublevalueOf(t1getText())doubleValue();

t1setText(""+(f/100));

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[10]) //"1"

{

if(x==1)

{

t1setText("1");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("1");

y=0;

}

else

t1setText(t1getText()+"1");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[11]) //"2"

{

if(x==1)

{

t1setText("2");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("2");

y=0;

}

else

t1setText(t1getText()+"2");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[12]) //"3"

{

if(x==1)

{

t1setText("3");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("3");

y=0;

}

else

t1setText(t1getText()+"3");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[13]) //"-"

{

if(y==1)

{

t1setText("0");

y=0;

}

if(d==0)

{

if(bequals("+"))

{

a=a+DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("-"))

{

a=a-DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals(""))

{

a=aDoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("/"))

{

double f=DoublevalueOf(t1getText())doubleValue();

if(f==0)

{

t1setText("错误!请按“CE”清屏后继续计算");

y=1;

}

else

{

a=a/DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(bequals(""))

{

a=DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(!t1getText()equals("错误!请按“CE”清屏后继续计算"))

{

b="-";

d=1;

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[14]) //"1/x"

{

if(y==1)

{

t1setText("0");

y=0;

}

else

{

double f=DoublevalueOf(t1getText())doubleValue();

t1setText(""+(1/f));

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

}

if(egetSource()==but[15]) //"0"

{

if(x==1)

{

t1setText("0");

x=0;

}

if(t1getText()equals("00")||t1getText()equals("0")||d==1||y==1)

{

t1setText("0");

y=0;

}

else

t1setText(t1getText()+"0");

d=0;

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[16]) //"-/+"

{

if(y==1)

{

t1setText("0");

y=0;

}

double f=DoublevalueOf(t1getText())doubleValue();

t1setText(""+(-f));

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[17]) //""

{

if(y==1)

{

t1setText("0");

y=0;

}

if(t1getText()indexOf("")==-1)//判断是否已经有""

{

t1setText(t1getText()+"");

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[18]) //"+"

{

if(y==1)

{

t1setText("0");

y=0;

}

if(d==0)

{

if(bequals("+"))

{

a=a+DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("-"))

{

a=a-DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals(""))

{

a=aDoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("/"))

{

double f=DoublevalueOf(t1getText())doubleValue();

if(f==0)

{

t1setText("错误!请按“CE”清屏后继续计算");

y=1;

}

else

{

a=a/DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(bequals(""))

{

a=DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(!t1getText()equals("错误!请按“CE”清屏后继续计算"))

{

b="+";

d=1;

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==but[19]) //"="

{

if(y==1)

{

t1setText("0");

y=0;

}

if(bequals("+"))

{

a=a+DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("-"))

{

a=a-DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals(""))

{

a=aDoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(bequals("/"))

{

double f=DoublevalueOf(t1getText())doubleValue();

if(f==0)

{

t1setText("错误!请按“CE”清屏后继续计算");

y=1;

}

else

{

a=a/DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

}

if(bequals(""))

{

a=DoublevalueOf(t1getText())doubleValue();

t1setText(""+a);

}

if(!t1getText()equals("错误!请按“CE”清屏后继续计算"))

{

b="";

d=1;

x=1;

}

if(t1getText()length()>40)

{

t1setText("错误!数字过长,请按“C”从新输入");

a=00;

b="";

d=0;

y=1;

}

}

if(egetSource()==bt11) //"Backspace"

{

if(y==1)

{

t1setText("0");

y=0;

}

else

{

String s1=t1getText();

if(s1length()==1)//如果将显示的数字全部退掉 则显示"0"

{

t1setText("0");

}

else

{

t1setText(s1substring(0,(s1length()-1)));//退格

}

}

}

if(egetSource()==bt12) //"CE"

{

t1setText("0");//清屏

}

if(egetSource()==bt13) //"C" 初始化

{

t1setText("0");

a=00;

b="";

d=0;

}

if(egetSource()==bt1) //""

{

}

if(egetSource()==bt2) //"MC"

{

}

if(egetSource()==bt3) //"MR"

{

}

if(egetSource()==bt4) //"MS"

{

}

if(egetSource()==bt5) //"M+"

{

}

}

}

public static void main(String args[])

{

Jsq a=new Jsq();

asetSize(300,250);

asetVisible(true);

}

}

下午发

五分钟搞定,先给你发个简单的,照例子自己去做你想要的计算器

package aaa;

import javaawt;

import javaawtevent;

import javaxswing;

public class YunSuan implements ActionListener,ItemListener

{

public static JFrame jf;

public static Container c;

public static JTextField jtf1,jtf2,jtf3;

public static JButton jb1;

public static Choice c2;

public static String fuhao="";

public YunSuan()

{

jf=new JFrame("加减乘除运算");

c=jfgetContentPane();

csetLayout(new FlowLayout());

jtf1=new JTextField(10);

jtf2=new JTextField(10);

jtf3=new JTextField(10);

c2=new Choice();

jb1=new JButton("=");

}

public void Jiemian()

{

cadd(jtf1);

c2addItemListener(this);

c2add("");

c2add("+");

c2add("-");

c2add("");

c2add("/");

cadd(c2);

cadd(jtf2);

jb1addActionListener(this);

cadd(jb1);

cadd(jtf3);

jfsetLocation(200,100);

jfsetVisible(true);

jfpack();

}

public static void main(String args[])

{

YunSuan ys=new YunSuan();

ysJiemian();

}

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

double s1=IntegerparseInt(jtf1getText());

double s2=IntegerparseInt(jtf2getText());

double result=0;

if(fuhaoequals("+"))

{

result=s1+s2;

String result2=StringvalueOf(result);

jtf3setText(result2);

}

if(fuhaoequals("-"))

{

result=s1-s2;

String result2=StringvalueOf(result);

jtf3setText(result2);

}

if(fuhaoequals(""))

{

result=s1s2;

String result2=StringvalueOf(result);

jtf3setText(result2);

}

if(fuhaoequals("/"))

{

result=s1/s2;

String result2=StringvalueOf(result);

jtf3setText(result2);

}

}

public void itemStateChanged(ItemEvent ie)

{

if(iegetSource()==c2)

{

String str1=c2getSelectedItem();

fanhui(str1);

}

}

public String fanhui(String str2)

{

return fuhao=str2;

}

}

TC不可以!VC可以的!纯代码当然可以实现

转一篇别的地方的GUI历史吧!既然你说会加分,呵呵

追溯GUI历史作者:agiha 日期:2005-08-30

字体大小: 小 中 大

如果你使用电脑已经有一些年头,那么必定知道那些没有图形界面的 *** 作系统,微软的DOS、UNIX以及最初的Linux,要熟练使用这些 *** 作系统,用户必须牢牢记住大量的命令并且达到应用自如的程度。在那些年代,如果能够掌握计算机 *** 作技能绝对会让人肃然起敬,但也正是由于 *** 作的复杂性,计算机很难真正进入家庭、为普通用户所掌握。

计算机业界很早就意识到这个问题,以图形界面(GUI,Graphic User Interface)代替字符界面成为广泛的共识—图形界面 *** 作直观,用户不加以特殊训练也能够很容易掌握,计算机应用的门槛大大降低。在上世纪八十年代之后,各种类别的 *** 作系统都竞相引入图形界面,这其中除了我们熟知的微软Windows和苹果机之外,还有为数众多、但后来没落无踪的其他系统。在九十年代中期,图形界面开始真正取代字符界面成为标准,这其中又以微软的Windows 95为典型代表。进入到2000年后, *** 作系统原本残留的字符界面模式被完全取消,而图形界面也不满足以简陋的设计,朝向注重视觉体验的方向发展,苹果Mac OS X与微软Windows XP堪称是两大支柱。而在这之后,图形界面走向完美和个性化时代,终端用户都可以参与其中,为自己设计一套个人化的界面外观,而业界则将目光放到更遥远的将来,希望能在未来 *** 作系统中采用3D化的全新视觉界面。

在下面的文字中,我们将向大家详细介绍图形界面的概念起源、实现以及详细的发展历程,期间将涉及到形形色色的 *** 作系统。

从理论探索到产品雏型

GUI界面电脑的概念始于上世纪三十年代,当时有一位名为“凡尼佛·布什(Vannevar Bush)”的人物,他天马行空提出一个称为“Memex”的智慧设备,他认为这种设备具有与书桌类似的外观,同时还有两个可触摸 *** 作的显示器、一个输入键盘以及一个扫描仪,通过这个设备,用户可以访问到人类的所有知识库。在那个年代,计算机远未产生,凡尼佛·布什的想法纯属没有根据的科学幻想,根本不可能成为现实。但不可否认的是,这套设想极富远见,它成功地描绘了半个世纪后的计算机形态,也许微软的平板电脑曾经从Memex的直接触摸 *** 作概念中获取灵感。

道格拉斯博士的NLS系统

我们无法确认微软是否借鉴了凡尼佛·布什的天才设想,但可以确信的是,这套设想对 *** 作系统引入GUI图形界面起到了至关重要的启蒙作用。1948年,道格拉斯·恩格尔巴特(Douglas Englebart,GUI与鼠标的发明者)在取得学士学位后进入美国国家航空咨询委员会(NACA,美国宇航局前身)工作,但他不满足于仅从事一些范围狭窄的小项目,而希望自身从事的工作能让整个世界获益。在一次上班途中,他突然回忆起凡尼佛·布什关于“Memex”的文章,并开始思考这样的设备应该如何实现。对于其中的触摸式显示屏,道格拉斯很自然就想到阴极射线管技术—在二战时,道格拉斯曾是一位雷达兵,而当时的雷达显示屏都是使用阴极射线管作为信号显示的核心装置。道格拉斯同时想到,屏幕上的信息应该以图形的方式存在,而 *** 作者能够自由地在屏幕的任何范围选择自己感兴趣的内容。这个设想让道格拉斯兴奋不已,但他万万没有想到,第一个雏形系统到20年后才真正出现。

图1 道格拉斯·恩格尔巴特博士,被誉为“GUI之父”和“鼠标之父”。

后来,道格拉斯离职进入加州大学伯克利分校,并于1956年获得电气工程与计算机博士学位,之后道格拉斯博士进入著名的斯坦福研究所,而在此期间他可以真正将自己的构想变成现实。1968年,道格拉斯博士终于获得成功,他将自己所开发的“NLS”图形系统公开演示,这套系统包括一个圆形的CRT显示器、一个键盘和一个鼠标,其名称“NLS”是“在线系统”的缩写,因为它是建立在几台计算机联网的基础上。NLS可以显示出图形界面,用户可以通过移动鼠标在整个屏幕上自由选择内容,实现无纸化的办公。尽管今天看来这种场景再平常不过,但在1968年绝对是革命性的新概念,以至于道格拉斯博士在演示NLS系统时,许多家电视台都进行实时报道、并引起外界的轰动。道格拉斯博士被因此誉为是“GUI界面之父”,不过他还拥有另外一个同样响亮的头衔:“鼠标之父”—他为NLS系统研制的鼠标后来成为计算机的标准输入设备之一,并深刻影响了计算机发展的进程。

图2 NLS系统,拥有显示器、键盘和鼠标。

Alto电脑与Smalltalk语言

道格拉斯博士的NLS系统让外界震惊,无纸化办公成为许多企业津津乐道的话题,施乐公司(Xerox)因此感到深深不安。印刷设备是施乐的命脉所在,在NLS系统出现后,施乐担忧“无纸时代”的到来将对他们产生巨大的冲击,意识到其中的“风险”,施乐高层认为不如抢先掌握这门技术,成为新领域的领导者,遂于1970年成立著名的帕罗奥托研究中心(PARC)来专门负责此事。尽管无纸化的风险在后来被证明纯属多余(进入PC时代后,办公纸张不仅未减少,反而消耗越多),但施乐高层当时所作的决定仍然是非常英明的。PARC成为世界上最好的研究所,它拥有一流的设备和人材,几乎所有人都是博士,或是各自领域中最好的专家。很自然,PARC拿出了包括 *** 作系统GUI界面在内的大量成果,而且也孕育了许多顶尖的科技人物,这其中包括3Com的创立者Bob Metcalfe以及微软的首席架构师(Chief Architect)查尔斯·西蒙尼(Charles Simonyi),当然这些都是后话。

PARC中心同时进行多个研究项目,在它们的第一批发明成果中就有激光打印机,这被誉为是打印技术的革命性突破。不过,PARC所发明的激光打印机无法独立工作,必须有一台图形化的电脑为它提供待打印的文档才行,而在那时,尚未有这样的电脑存在。PARC的计算机科学家干脆自己动手,他们从道格拉斯博士的NLS系统中获取灵感,并于1973年发明了Alto电脑。Alto被认为是 *** 作系统GUI界面发展史上的里程碑,它拥有视窗(Windows)和下拉菜单(Pull-Down MENU),并通过鼠标(Mouse)进行灵活 *** 作,真正打破了困扰业界已久的人机阻隔,极大提升了 *** 作效率,由此也组成了工业界的WIMP标准。这里有一个不得不提到的插曲:一位名叫查尔斯·西蒙尼的伯克利分校学生有幸参与Alto开发项目,他为Alto电脑编写了一个文本编辑器:“Bravo”,Bravo改变了信息组织和显示的方式,被公认是第一个“所见即所得”的文字处理软件。

1975年,PARC正式对外公开Alto电脑,当时有大量的精英人物前往参观。在花旗银行的代表参观时,西蒙尼向他们演示Alto电脑、Bravo软件、网络和激光打印机的协作过程。Bravo使用各种字体来编辑文件,这些文件被显示在Alto电脑的屏幕上,然后相关数据通过以太网被传输到打印机上,而打印出的文件与屏幕上显示的内容看起来一模一样。“所见即所得”的概念由此产生,而这整整比苹果Macintosh电脑早了11年,但成为标准的却是后者。

与Alto电脑共生的还有Smalltalk语言。Smalltalk是第一种面向对象的编程语言,且具有类似Java的自动内存管理功能,用任何语言来形容这个伟大的成果都不过分。PARC使用Smalltalk语言来设计图形化环境,并带来许多崭新的GUI编程理念,今天我们所见的所有可视化开发平台,都可以看作是Smalltalk的思想衍生。在Alto电脑发明之后,PARC的许多开发成员都希望能够将它商业化—Alto比后来的苹果机屏幕要大,一样有鼠标和图形界面,前景可观。可遗憾的是,施乐一直拘泥于“产品越大越好”的大公司作风,只愿意生产复杂而昂贵的机器,对Alto电脑兴趣不高。Alto电脑定价为5万美元,而激光打印机需要二十万美元,后者自然成为施乐的新方向,Alto电脑则被施乐高层所忽视。随后,PARC的成员坚持对Alto进行多番改进,并最终发展到Alto III型,但开发者强烈的商业化意愿再度被施乐拒绝。直到1981年,施乐公司才将Alto电脑的精简版—Star 8010文档处理机以17000美元的价格推向市场,Star 8010与Alto有较大的不同,但它具备优秀的文档处理能力,多个文档可以并列在屏幕上不相互交叠,用户可以很方便地同时处理。可惜在这个时候,施乐已经错失抢占制高点的最佳时机,在市场上Star 8010没有获得多大的反响。更不幸的是,PARC的众多精英不满施乐而另谋出路,大量的精英加入苹果电脑公司展开冒险之旅,不过开发Bravo软件的查尔斯·西蒙尼却去了当时名不见经传的微软公司,后来他成为了微软的事实缔造者之一。

图3 施乐Alto计算机

图4 Alto的文件管理器

图5 施乐Star 8010文档处理机

苹果Lisa/Macintosh的诞生

施乐未及时将Alto推向市场错失良机,最终只有在施乐公司内部为员工所使用,没有对外推广。不过,Alto还是成为图形化 *** 作系统的先导,后来的苹果Lisa电脑和微软Windows 10,都可以看作是Alto思想的直接继承。而在图形化 *** 作系统方面,相比微软,苹果显然领先了一步。在当时,由史蒂夫·乔布斯和史蒂夫·沃兹尼克创办的苹果电脑公司被公认为是个人计算机的先锋,可它们在图形界面上并没有太大的建树。AppleⅠ完全基于命令行 *** 作,后来推出的AppleⅡ虽然配有简单的图形界面,但没有鼠标,完全依靠键盘输入,同时也保留了传统的命令行 *** 作。比较幸运的是,施乐公司的Alto没有被推向市场,而IBM在个人计算机领域后知后觉,AppleⅡ便成为当时可买到的唯一一款拥有“图形界面”的个人电脑,而苹果当然也就大发其财,进入前所未有的高速发展阶段。作为一家生机勃勃的年轻企业,苹果公司成为许多精英向往的乐土,施乐PARC中心出走的许多工程师随后都加入苹果,而这些工程师也就得以继续他们之前的工作,这样,Alto电脑及Smalltalk语言就以另一种形式出现在计算机的大舞台上。

从技术水平来看,AppleⅡ计算机无论如何也无法与同时代的Alto相比,PARC的前工程师们深知这一点,在他们的安排下,苹果电脑公司的创始人之一,即后来大名鼎鼎的乔布斯(Steve Jobs)得以进入PARC研究中心,他见到了传说中的Alto电脑并观看了相关演示。乔布斯详细了解了Alto电脑的整套概念,完全图形化的界面和用鼠标灵活输入的 *** 控方式让他深感震惊。在此之后,乔布斯就成为GUI界面的忠实信徒,他决心开发一套类似的电脑并将它推向市场—这是发生在1979年的事情,而乔布斯的这次参观,直接改变了后来的“Lisa”计算机项目,PC与 *** 作系统的发展方向因此被扭转到“正确”方向。

为了完成Lisa,开发者在AppleⅡ计算机上模拟了多种不同的界面原型,包括一套基于任务界面的“Twenty Questions”方案,以及一个拥有四列文件浏览的方案,后一项设计后来在NeXTStep系统和Mac OS X系统中也得到借鉴。不过,Lisa开发团队最终选择基于图标显示的方案,在该方案中,所有的文件、文件夹和应用程序都使用图标来表示,同时它还拥有下拉菜单条,而菜单栏则被放置在屏幕的最上部。如果我们对照一下现在的Mac OS X系统,便会发现它的基本元素仍然继承于Lisa。此外,Lisa计算机还拥有大量的创新,例如引入键盘快捷命令,一些 *** 作频繁的菜单命令可借助快捷键实现,以滚动条代替原本固定高度的窗格;垃圾箱支持拖曳功能,那些不需要的文件可以通过鼠标拖曳的方式直接删除。另外,引入了菜单的前景、背景概念,那些暂时没有被选中的菜单处于较浅的“泛灰色”,这样用户 *** 作时可一目了然。Lisa理所当然引入了鼠标,不过苹果公司对鼠标 *** 作进行了非常大的改变—最初Alto电脑上使用了三键鼠标,后来施乐的Star 8010文档处理机则精简到双键方式,而苹果Lisa则使用只有一个按键的鼠标,这样做是为了简化 *** 作起见(苹果显然低估了用户掌握技术的能力),但基于图标的GUI系统至少需要选中、运行等两种鼠标 *** 作,为此,苹果发明了双击 *** 作,这在后来成为所有GUI *** 作系统的标准,即便现在的鼠标已经拥有大量的按键。

Lisa计算机开创了许多前所未有的GUI概念,而这些概念也多数都被沿用至今。我们知道,之前的施乐Alto电脑和Star 8010文档处理机都有图标的概念,但Lisa才是第一部真正采用图标来表示文件的计算机。在Lisa系统中,图标文件以地址路径的方式加以组织,开启每个路径时都会d出一个独立的显示窗口;而Lisa引入的“拖放 *** 作”也堪称一大发明,它以直观自然的方式实现很多原本复杂的 *** 作,例如,我们可以选中文件、文件夹并将它们拖到其他的窗口下,这样就完成拷贝 *** 作;此外Lisa还有大量可有效简化 *** 作的细微设计,如允许用户为每个文件指定执行的程序,只要双击该文件便会被相应的程序自动开启。几乎所有的这些细节在后来的GUI *** 作系统中都得到传承。

Lisa项目始于1979年,但直到1983年才正式开发完毕。可问题接踵而来,这部计算机售价定在1万美元,虽然在当时这样的价格不算昂贵,但还是有大量的用户无法接受,而如果用户群体不够广泛,专门为Lisa平台开发软件就变得很不现实。为此,苹果决定开发廉价版的Lisa,这也就是著名的“Macintosh”项目。Macintosh计算机在1984年被推向市场,它拥有一个9英寸的单色屏幕、128KB内存和一个软盘驱动器,保留了Lisa计算机大量的GUI特性,但它不具备多任务处理能力,也无法实现在两个程序间灵活切换,售价只有2495美元。Macintosh的发布引发巨大的轰动,人们第一次看到计算机拥有如此绚丽的 *** 作界面、听到计算机能发出如此美妙的声音,而且也是第一次体验到计算机如此简便的 *** 作。Macintosh的业绩堪称辉煌,苹果公司也到达发展史上的最高点—虽然此后,苹果公司一直走下坡路,但Macintosh的后续版本似乎没有受到特别大的影响,即便在九十年代中后期苹果濒临倒闭时,Mac OS 8和Mac OS 9在技术上依然没有落后对手。

图6 创下许多个第一的Lisa计算机

图7 Macintosh System 1的GUI界面

兴旺蓬勃的GUI运动

除了苹果的Lisa外,在上世纪八十年代还有大量的GUI *** 作系统,包括VisiCorp公司的VisiOn、微软的Windows 10和20、Tandy公司的DeskMate、Digital Research的GEM、IBM OS/2、NeXT公司的NeXTStep、为UNIX开发的X Window等等,但除了Windows、NeXTStep和X Window最终修成正果外,其他的所有GUI后来都没有得到持续发展。下面,我们将以出现时间的先后顺序来向大家介绍这些GUI的特性及发展概况。

图8 VisiOn的用户界面

VisiOn *** 作系统

在苹果致力于开发Lisa图形界面时,VisiCorp公司也在从事同样的工作。VisiCorp是世界上第一款电子表格软件VisiCalc的缔造者,当时它是最强的PC应用软件企业。不过,VisiCorp并非自己制造计算机,而是为IBM PC开发带有图形GUI的 *** 作系统,这套产品被定名为“VisiOn”,发布时间是在1983年。

尽管VisiOn也实现了图形化 *** 作,但它存在大量的不足:首先,VisiOn的价格过于昂贵,单套软件的售价就达到1495美元,这让许多用户难以接受;其次,VisiOn对硬件要求明显过高,它只有在512KB内存、带有硬盘和鼠标的PC-XT计算机上才能够工作,这样许多不符合要求的用户就被挡在门外。更要命的是,VisiOn在设计上并无过人之处,如它只支持640×200的单色图形模式,也未脱离基于文本的痕迹。例如,VisiOn根本无法支持图标功能,用户必须点击文本标签才能够打开文件或执行程序;在视觉方面,VisiOn仅支持固定宽度的字体显示,不仅明显逊于苹果的Lisa和Macintosh,甚至连施乐Alto、Star 8010都不如。另外,VisiOn对鼠标支持极为有限,它甚至无法支持鼠标斜线移动,而仅能让光标水平或垂直运动—这相当于1968年道格拉斯博士NLS系统的水平。虽然技术比Lisa落后了一大截,但它却是当时PC机唯一能够使用的GUI图形 *** 作系统。不幸的是,当比尔·盖茨看到VisiOn给DOS带来的现实威胁后,发起了一场堪称经典的宣传战。微软竭尽所能向用户大力宣传Windows系统的种种好处,力求从心理上和精神上赢得用户,这场宣传战的目的在于瓦解潜在对手而非促进销售。事实上,在那个时候Windows不仅还没有面市,而且几乎还未开始设计。但微软的这场宣传非常有效,当VisiOn开始销售时,VisiCorp意外发现接受这套产品的人寥寥无几,因为几乎整个世界都在等待微软的“Windows”。VisiCorp公司轻而易举就被微软击败,同时VisiOn也走到了尽头,没有后来者为它延续生命。

图9 Windows 101的界面,它可支持两个平铺窗口的界限调整。

微软Windows起步

VisiOn无疑是非常失败的产品,但它却促使微软不得不开发比它更有竞争力的产品。起初,微软将自己的GUI系统命名为“Interface Manager(界面管理者)”,但后来选择了一个更形象、更有亲和力的名字Windows。Windows的原型系统于1983年推出,它的界面看起来就像是VisiOn与Microsoft Word for DOS *** 作界面的混合—Microsoft Word for DOS脱胎于Alto电脑的Bravo编辑器,它是西蒙尼加入微软后带来的杰作。

此后又过了两年,Windows 10才得以正式发布。与原型系统相比,Windows 10明显成熟,它拥有流行GUI的共有特点,例如页面滚动条、窗口控制器和菜单,但在细节设计上Windows与其他的GUI还是存在大量的不同,例如每个应用程序都有菜单栏,采用窗口平铺而非重叠设计。这其中有一个有趣的插曲,来自施乐PARC中心的设计者认为平铺设计优于重叠设计,但比尔·盖茨本人并不这么认为,遂定下未来的Windows GUI应采用窗口重叠方式,这套规则在Windows 20生效后被一直沿用至今。不过Windows 10还是采用平铺设计,当然它并非是一套独立的 *** 作系统,而是为DOS系统设计的GUI图形界面。由于Windows 10功能弱小,绝大多数用户还是习惯于使用命令行。

图10 Tandy DeskMate系统外观

Tandy DeskMate GUI系统

Tandy计算机公司的名字也许没有多少人听说过,但在1984年,这家公司也发布了它们独自开发的GUI系统DeskMate。不过,DeskMate对鼠标支持非常有限,它主要依靠键盘 *** 作,并采用平铺设计的窗口。理所当然,DeskMate非常难于使用,而在销售上,它一直与Tandy自己的计算机捆绑,未有公开推广。

Digital Research推出GEM GUI

1985年底,Digital Research公司推出一种名为GEM的图形环境,与Windows一样,它是一套为DOS系统设计的GUI,但同时也可工作在Atari的ST计算机上(Atari公司成立于1972年,由美国犹他大学毕业生Bushnell创立,从事供家庭娱乐的计算机软硬件研发,可以说是当今电子游戏机的始祖)。实际上,GEM也是由大量来自施乐PARC的研发人员 *** 刀,但不幸的是,它与苹果的Lisa/Macintosh GUI实在是太像了,同样的图标表示,菜单栏被放置在屏幕顶部,鼠标 *** 作也非常相似。大为光火的苹果起诉Digital Research侵权,结果便是Digital Research被迫对PC DOS的GEM版本作修改,但比较奇怪的是,针对Atari计算机的GEM GUI居然没有受到波及。

图11 运行在Atari ST计算机上的GEM 10图形环境

图12 Workbench 10 GUI图形环境

Amiga Workbench图形环境

Commodore公司出品的Amiga计算机曾在市场上风靡一时,它使用了支持多媒体图形和音频的多处理器技术,具有优秀的视频与音频质量,这也使得它广泛超越了同时期的其它电脑。此外,Amiga配备的 *** 作系统可支持多任务环境,这一点连苹果、微软和IBM都自愧不如,不过在图形环境方面,Amiga采用的是一套名为“Workbench”的GUI,在当时它也算颇有亮点:支持窗口的上下移动,选择或移动时窗口会自动出现在前景,位于顶部的菜单栏可自动隐藏,并可通过鼠标右键加以激活等等。但由于Commodore公司经营不善,Workbench GUI后来也没有了下文。

图13 GEOS GUI,与GEM、Lisa/Macintosh都有些类似。

Berkely Softworks发布GEOS

在1986年,Berkely Softworks公司发布了GEOS图形GUI,它与遇到麻烦的GEM GUI有不少相似之处,但其主要应用对象是诸如Apple Ⅱ、Commodore 64等有些年头的计算机产品。很不幸,GEOS出台的时间太迟了,此时它面临着微软Windows的强力竞争,自然GEOS后来也不知所踪。

图14 Windows 20版,增加了最大化和最小化按钮,并改用窗口重叠布局。

微软Windows 20

在1987年,微软将Windows GUI升级到20版本,Windows 20放弃了窗口平铺设计,转为目前流行的重叠模式,并使用了大量类似Macintosh的GUI元素,成熟度远远优于之前的10版。苹果公司看到之后深表震惊,他们不惜提起诉讼,认为Windows 20侵犯了Macintosh的“look & feel”视觉专利,苹果声称,Macintosh的“整体视觉外观”受到著作权保护,Windows虽然在某些窗口细节方面不同于Macintosh,但整体看起来非常类似。而法庭随之要求苹果公司提供具体的证据,苹果遂提交了189个GUI元素。不幸的是,苹果似乎忘记了其中的179个元素都已经在微软Windows 10协议中许可过(以换取微软为Macintosh平台开发办公软件),而剩下的10个元素基本上都不受著作权保护,要么不是苹果的原创,要么这些元素就是唯一可能的通用实现。这场诉讼最终持续到1994年,苹果陷入完全的失败,此时没有什么力量可以阻挡微软的崛起。

有必要提到一个有趣的插曲:在苹果起诉微软侵权期间,施乐公司也提起对苹果的诉讼,施乐声称它才是GUI著作权的真正拥有者,而从历史发展来看,施乐确实是所有GUI的发展源头。不过,这个案子在技术层面也被否决。

图15 Acorn公司的Arthur GUI,在当时创下了几个第一。

针对32位RISC平台的“Arthur”

也是在1987年,Acorn计算机公司发布世界上首款采用32位RISC处理器(ARM2处理器,8MHz)的微型电脑—Acorn A305/A310,同时它们也为这台电脑设计了一款名为“Arthur”的GUI。与其他多数GUI一样,Arthur带有滚动条,允许用户通过卷动页面来获取更多的内容,同时也拥有不少创举。Arthur可显示出16种颜色,它同时也是第一款可支持抗锯齿字体显示的GUI产品;而且在屏幕底部位置还设计了一个专门的“停靠栏(Dock)”,常用程序的快捷方式或工具可以被放在该停靠栏上,这样用户就能迅速 *** 作电脑。在多年以后,苹果公司在设计Mac OS X时也引入了这项设计,这是后话。而Arthur后来被Acorn公司重命名为“RISC OS”,并发展到40版本,但它最终还是没有在残酷的竞争中生存下去。

这里有必要插入一些题外话。我们知道,80年代中期和之前发布的许多GUI产品,都采用固定宽度的字体,如GEM、Windows 10、Amiga Workbench和Acorn的Arthur等等。但事实上,所有这些GUI都可以在应用程序中支持比例显示的字体,设计者之所以没有在 *** 作系统中采用同样的设计,原因在于当时计算机显示器的分辨率实在太低了——多数计算的显示器都只有640×200分辨率,即使是Macintosh,最高也只能支持384像素的垂直分辨率。而随着技术的发展,显示分辨率不断提高,GUI也普遍采纳比例显示字体作为新标准。

图16 NeXTSep *** 作系统,精致程度远超过之前的各家作品。

乔布斯打造NeXTStep

在1985年,乔布斯离开亲手创立的苹果公司,成立了一家名为“NeXT”的电脑公司,乔布斯希望打造一款真正面向未来的终极电脑,开发新的图形化 *** 作系统当然就是重中之重。NeXT公司的作品被命名为“NeXTStep”,开发工作始于1985年终于1988年。从技术上讲,NeXTStep的确是一款卓越不凡的图形化 *** 作系统:所有GUI元素都加以三维阴影修饰,包括窗口、菜单、按钮等等,一改之前GUI的简陋作风;NeXTStep率先在窗口右上角设立“X”符号,作为关闭窗口的快捷方式;NeXTStep引入垂直菜单条设计,用户只要点击屏幕左上角的特定标识菜单条就会下拉,而鼠标在屏幕上的其他位置再点击一下菜单条就会自动关闭, *** 作颇为方便;NeXTStep也引入了Dock停靠栏,但与Arthur GUI不同的是,这个停靠栏可以被放在屏幕的任意一边(默认位置为屏幕的右边)。

由于视觉效果大大提升,NeXTStep对硬件也提出了“苛刻”的要求,一款具有较高分辨率的显示器是必须的,否则NeXTStep就无法正常工作。

图17 OS/2 11的GUI界面,它居然只能支持单色的图标,甚至后来的12版也未引入当时流行的彩色设计。

1988年IBM OS/2诞生

IBM的OS/2也是在1988年诞生,它原本设计作为DOS的替代品,由IBM与微软联手 *** 刀。那个时候,微软远没有向IBM说不的勇气,但他们在OS/2开发上也没有什么杰出表现。OS/2 10版基于文本命令行方式 *** 作,而11版则增加了图形GUI,在上面的中,你可以看到它与微软Windows 20颇为类似,但技术水准比同期出现的NeXTStep落后了数个档次。

图18 1998年发布的KDE桌面环境

针对UNIX的X Window System

GUI大潮不可避免波及到铁板一块的UNIX领域,早在1984年,麻省理工学院(MIT)就与DEC公司合作,致力于在UNIX系统上开发一个分散式的视窗环境,这便是大名鼎鼎的“X Window System”项目。1986年,MIT正式发行X Window,此后它便成为UNIX的标准视窗环境。紧接着,全力负责发展该项目的X协会成立,X Window进入了新阶段。与此同时,许多UNIX厂商也在X Window原型上开

看看这里吧,最好的入门视频教程,符合你的要求:

>

以上就是关于java编程 完成下图所示的图形用户界面设计(窗口标题为你的真实学号及姓名,例如:11930670全部的内容,包括:java编程 完成下图所示的图形用户界面设计(窗口标题为你的真实学号及姓名,例如:11930670、C++ 图形界面、Mac上如何编写具有图形界面的C程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9773958.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存