『壹』 程序设计中的架构到底是指什么
程序设计中的架构是指是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。
软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。
在软件架构所描述的对象就是直接的进行系统抽象组件构成。连接系统的各个组件之间就是做到把组件之间所存在的通讯比较明确与相对细致的实施描述。
处于相应的系统实现环节,那么就会使得细化这些抽象组件成为现实的组件,比如可以是具体的某个类或者是对象。从面向对象领域进行分析,那么各个组件之前实施的连接实现往往是接口。
(1)程序界面架构设计原理扩展阅读:
程序设计中架构的三种分类:
1、逻辑架构:
软件系统系统当中的各个元件之间所存在的关系,比如外部系统接口、用户界面、商业逻辑元件、数据库等。
2、物理架构:
究竟是怎样做到在硬件当中放置软件元件。例如处于上海与北京进行分布的分布式系统的物理架构,这也就是说全部的元件都是属于物理设备,主要的有主机、整合服务器、应用服务器、代理服务器、存储服务器、报表服务器、Web服务器、网络分流器等。
3、系统架构:
相应的系统存在着性能、强壮性、可扩展性、灵活性、可靠性等这些非功能性特征。设计系统的架构比要让系统架构设计人员存在着过硬的软件与硬件的性能与功能,往往从事这样的工作这是属于设计系统架构环节最为困难的工作。
参考资料来源:网络-软件架构
『贰』 简述java程序设计中界面设计中的三种布局方式
1 边框布局
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new FlowLayout());
凭着我们现在所积累的阅读程序的功夫,应该能够很快地知道我们通过第一条语句创建了一个容器JPanel类的panel1。
而接下来,我们则调用了panel1.setLayout(new FlowLayout()),在上一章中,我们一直没有对它进行相应的分析。现在该是揭开它的面纱的时候了。
单词layout的中文意思是“布局”、“布置”,setLayout就是设置布局格式。也就是说,容器panel1的方法setLayout是用来设置布局格式的。那么,我们一直用的是什么模式呢?对,就是后面括号里的FlowLayout()。顾名思义,也就是流布局方式。这是一种顺其自然的方式:从左到右,一个个对象地摆放,摆不下,就摆到下一行。所以,我们就无法去控制它。
从本章开始,我们就要学习一种控制布局的方法。在Java语言中,提供了各种布局管理器,以便大家能够达到这一目的。
通常我们最常使用的布局管理器是:Border Layout(边框布局管理器),如下图所示,边框布局管理器将一个屏幕分成了五个部分:东、南、西、北、中。
如果要使用这种边框布局管理进行布局控制,我们必须先将“容器”设置为“边框布局控制模式”,具体来说,就是当调用setLayout方法为容器设置布局控制模式时,参数设置为BorderLayout。例如:
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new BorderLayout());
然后,我们就可以在使用容器的add方法添加部件时,附加上位置参数,使得该部件显示在指定的位置上。位置参数分别是:
BorderLayout.NORTH 位置为北
BorderLayout.SOUTH 位置为南
BorderLayout.EAST 位置为东
BorderLayout.WEST 位置为西
BorderLayout.NORTH 位置为中心
实例说明
下面,我们就来试一试,使用按钮排出五个方向!请创建一个testBorder.java,输入以下源程序:
源程序:useTextArea.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class testBorder extends JApplet
{
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new BorderLayout());
JButton north=new JButton("North");
JButton south=new JButton("South");
JButton east=new JButton("East");
JButton west=new JButton("West");
JButton center=new JButton("Center");
panel1.add(north,BorderLayout.NORTH);
panel1.add(south,BorderLayout.SOUTH);
panel1.add(east,BorderLayout.EAST);
panel1.add(west,BorderLayout.WEST);
panel1.add(center,BorderLayout.CENTER);
}
}
然后,我们使用javac编译这个程序,然后编辑一个显示这个Java Applet的HTML页面。最后调用appletviewer来观察这个页面
为了试一下,如果并没有在每个位置都安排一个部件,那么会怎么样呢?我们修改一下程序,将panel1.add(west,BorderLayout.WEST);这一行注释掉(就是在前面加上“//”号),也就是不显示西边的按钮,看一下结果如何。正如上图(图10-3)所示,西边由于没有部件,因此“中”就朝西靠,“占领”了它的位置。
而如果我们修改一下程序,让中间的按钮不显示的话,就会出现如图10-5的样子,中间的区域并未并占领,而是空在那里了!这是与其它位置不同的地方,大家一定要记住。
一些提示:
其实这很好理解,如果中间的那一块的位置被其它位置上的部件占领的话,就会使得分不清“东”、“南”、“西”、“北”了。倒成了“左上角”、“左下角”、“右上角”、“右下角”了。
2 网格布局
实例说明
下面,我们来看一个新的程序!首先创建一个testGrid.java文件,并输入以下源程序:
源程序:testGrid.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class testGrid extends JApplet
{
String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",
"No.6","No.7","No.8","No.9"};
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridLayout(3,3));
for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));
}
}
然后,我们使用javac编译这个程序,然后编辑一个显示这个Java Applet的HTML页面。最后调用appletviewer来观察这个页面
我们主要是关心如何摆放各个部件,而不是如何构建一个程序。所以,正如本例中的按钮一下,这一章中的所有部件都是一个样子,没有任何作用。这样也使得程序尽可能地变短了,更易于大家阅读和理解程序。
下面,我们就一起来看一下上面的这个程序。
1) String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",
"No.6","No.7","No.8","No.9"}
我想大家都能很轻松地读懂这条语句,我们在此定义了一个字符串数组buttonLabels,它有9个字符串成员,也就是我们后面定义的9个按钮的标签文本。
值得注意的是,大家一定要知道,buttonLabels[1]表示哪个字符串!如果您的答案是“No.1”的话,就错了!正确的答案是“No.2”,这是因为在数组中索引值是从0开始的,也就是说如果要使用“No.1”的话,应该使用buttonLabels[0]。这对更好地理解后面的程序十分重要,也是基本功之一。
2) JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridLayout(3,3));
在这两行程序中,我们首先定义了一个容器部件panel1。然后调用setLayout方法设置布局管理器。这里我们使用了一个新的布局管理器:GridLayout,网格布局管理器。
我们注意到GridLayout的后面带了两个参数:3,3。这有什么用呢?我们一起来看一下GridLayout方法的定义:
public GridLayout (int rows,int cols)
我们看一下这两个参数,首先它们都是int型—整型的。那么它们分别起到什么作用呢?我们还是采用顾名思义法吧!row的中文意思是行,col的中文意思是列,后面加上一个s,是这两个单词的复数形式。
好,我们现在串起来想一下,我们定义了一个网格布局,然后定了它的行、列数!这不就画出了这个网格了吗?如果我们在语句是使用GridLayout(5,5)的话,就会把整个容器分成25个单元
而我们在程序中使用的是GridLayout(3,3),所以它就将整个容器分成了
注意:
这种划分是一种逻辑上的,暗藏式的划分,而不会把格子给划出来。另外,我们这里举的两个例子行、列都相等,其实完全可以不等。
3) for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));
这是一个循环结构的程序。我们先看循环语句,循环的初值是“x=0”,继续执行循环的条件语句是“xbuttonLabels.length就是用来请得字符串数组buttonLabels的长度!也就是这个字符串数组中有多少个字符串?我们知道,我们在该数组中定义了9个。
从程序中,我们可以获知,当x=buttonLabels.length时,循环就将结束,应为它不满足条件x别忘了,我们使用buttonLabels[0]表示第一个字符串,buttonLabels[1]表示第二个字符串……,那么最后一个字符串就应该是buttonLabels[buttonLabels.length-1]嘛。
在循环中,我们使用容器提供的add方法,将新定义的按钮部件添加进去。
有时,我们可能想获得象下图所示的布局效果!让各个部件之间存在一些间隙。使用Java的网格布局可以实现吗?
我很高兴地回答你:“可以!”,我们可以使用GridLayout的另一种构造器方法(签名不同)来实现:
public GridLayout (int rows,int cols,int hgap,int vgap)
在这个方法中,可以带上四个整型参数,前两个我们已经很熟悉了,行数与列数。后面则是两个新的参数。
第一个是hgap,其中gap的意思是间隙、空隙的意思,而h则是horizontal(水平)的第一个字母。也就是说,我们可以通过hgap参数设置横向的间隙。
第二个是vgap,v则是vertical(垂直)的第一个字母。也就是说,我们可以通过vgap参数设置纵向的间隙。
自测练习
1)_________________是网格布局管理器。
a.BorderLayout b.GridLayout c.ReseauLayout
d.FlowLayout
利用以下代码回答问题2、3、4、5:
2)这个布局中有__________行?
a.7行 b.5行 c.6行 d.8行
3)这个布局中有__________列?
a.7行 b.5行 c.6行 d.8行
4)这个布局将容器分为_________个部分?
a.48个 b.35个 c.30个 d.40个
5)第5个部件位于__________位置。
a.左上角 b.左下角 c.右上角 d.右下角 e.中间
6)根据以下界面,编写一个程序
图10-12 练习题图
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
7) 如果我们构建一个5*5的网格布局,但只在该容器中加入17个按钮,将会出现什么情况?请编写一个程序,来试一试效果。
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
练习答案
1)b 没什么好解释的,请大家记住!
2)a 第一个参数是行数,因此是7行。
3)b 第二个参数是列数,因此为5列。
4)b 7行5列,其7*5,35个部分嘛。
5)c 第5个部件是第一行的最后一个,当然在右上角嘛。
6)下面是一个实现的程序实例:
源程序:lianxi10_2.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class lianxi10_2 extends JApplet
{
String buttonLabels[]={"1","2","3","4","5","6","7",
"8","9","*","0","#"};
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridLayout(4,3,10,10));
for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));
}
}
7)下面是一个实现的程序实例:
源程序:lianxi10_3.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class lianxi10_3 extends JApplet
{
String buttonLabels[]={"No.1","No.2","No.3","No.4","No.5",
"No.6","No.7","No.8","No.9","No.10","No.11","No.12",
"No.13","No.14","No.15","No.16","No.17"};
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridLayout(5,5));
for (int x=0; xpanel1.add(new JButton(buttonLabels[x]));
}
}
这个程序使用javac编译完后,编写一个包含这个类的HTML页面,再用appletviewer来观察发现运行结果如下图所示:
图10-13 练习答案图
这个输出是不是令你感到十分意外,整个程序根本不按要求分成5列,所以我们从这里得到一个使用网格布局中要十二分注意的一点:“请别忘了将网格填满”。否则程序的输出将不可预料。
一些提示:
如果你真的没有那么多东西来“占领”网格的话,我建议你使用一个空标签来填补这个空白的网格,使得程序的输出如你所愿。使用空标签的方法很容易:
panel1.add(new Label(“”));
从这里,我们也看出了,我们学习过的流布局管理器、边框布局管理器,以及我们刚学习过的网格布局管理器都比较死板,不够高级。
10.3 组合布局
传授新知
正如我们在上一小节结束的时候说的一样,各种布局管理器都有自己的缺点,没有一种能够真正地完全满足我们编写GUI程序时的要求。
而在Java语言中,允许在容器中加入其他容器,这样每个容器可以根据自己的需要采用不同的布局管理器,组合成为一个我们所需要的GUI程序界面。这种方法,我们就称之为组合布局。
注意:
与流布局、边框布局、网格布局不同,组合布局并不是一个新的布局管理器,它是通过结合各种布局管理器的优点,将它们组合地应用在GUI程序界面的开发中。这是一种布局管理的方法。也可以说是一种GUI程序界面的开发技巧。
当我们设计GUI程序界面时,最好先在纸上把它画出来,然后“分块解决”。也就是将能够组合在一起的部件找出来,将它们放在一个容器里,并为它们选择合适的布局管理器。然后把这些容器摆放在一起,就解决了。
设计时还要考虑到窗体大小发生改变的时候,引起的部件形体变化。这方面,请你熟记几个设计技巧:
1) 对于那些要求扁平状的部件,我们应该将它放置在边框布局中的南面或北面;
2) 对于那些要求细高状的部件,我们应该将它放置在边框布局中的东面或西面;
3) 对于那些可以随着窗体改变大小部分,我们可以将它放置在边框布局的中间;
4) 如果我们要求部件保持大小相同,那么,我们就应该采用网格布局。
下面,我们就通过几个实际的例子,来让大家领会和掌握这种设计的思路与方法。
实例说明
我们首先创建一个testCombination.java文件,然后输入以下源程序:
源程序:testCombination.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class testCombination1 extends JApplet
{
public void init()
{
Frame frame1=new Frame("testCombination1");
frame1.setLayout(new BorderLayout());
TextArea text1=new TextArea();
frame1.add(text1,BorderLayout.CENTER);
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridLayout(1,3,10,5));
panel1.add(new JButton("A"));
panel1.add(new JButton("B"));
panel1.add(new JButton("C"));
frame1.add(panel1,BorderLayout.SOUTH);
frame1.pack();
frame1.show();
}
}
然后,我们使用javac编译这个程序,然后编辑一个显示这个Java Applet的HTML页面。最后调用appletviewer来观察这个页面,如下图所示:
图10-14 程序testCombination.java的输出
正如上图所示,程序的输出与以前不同,各个部件不是显示在Appletviewer程序框中,而是显示在另一个窗口中。
这是怎么回事呢?下面我们就一起来看一下这个程序!
传授新知
在以前的程序中,我们一直都是使用容器JPanel,面板。而我们在这个程序中引进了一个新的容器Frame。使用了这个容器后,就会新创建一个窗口。这也就是为什么程序的输出有这么大的变化的原因。
1)Frame frame1=new Frame("testCombination");
这条语句,定义了一个Frame容器frame1,然后使用new操作符调用构造器方法,后面带的参数“testCombination”则是这个Frame的标题。
一些提示:
其实大家能Frame所体现出来的效果是很熟悉的,它等价于Windows中的窗体。而Frame的标题就是窗体的标题。
2) frame1.setLayout(new BorderLayout());
与JPanel容器一样,我们可以调用setLayout方法来设置Frame的布局管理器。在这里,我们将Frame容器frame1的布局管理器设置成为边框布局管理器(也就是我们在10.1小节中学习过的布局管理器)。
3) frame1.add(text1,BorderLayout.CENTER);
紧接着,我们调用frame1的add方法,将文本区部件text1添加到frame1容器中来。注意我们设置了它的位置:BorderLayout.CENTER。
这是因为,我们希望这个文本区能够随着窗体的大小变化而变化。所以适合将其放在在中间位置。
4) panel1.setLayout(new GridLayout(1,3,10,5));
我们又定义了一个JPanel容器panel1,并将其的布局管理器设置为网格布局管理器。并通过指定参数,使得整个panel1被分成1行3列,水平空隙为10的网格。
5) frame1.add(panel1,BorderLayout.SOUTH);
这是组合布局方法最重要的一步,我们将panel1这个容器,加入到了frame1这个容器中去了。并且指定了panel1这个容器在整个frame1中所占的位置:BorderLayout.SOUTH,也就是下边。这样,panel1中包含的三个按钮就会永远(不管窗体大小如何改变)呆在文本区的下边,而且三个按钮的大小会根据窗体大小的改变而改变。
一些提示:
这是因为,panel1中的按钮是用网格布局的。
6) frame1.pack();
frame1.show();
与JPanel不一样,使用Frame容器,不能够直接显示了出来。我们必须调用Frame容器的show方法才能使得Frame显示出来。
而在使用show方法之前,我们还需要使用pack方法将Frame中的内容做一个整合。请记住这里的使用方法。
4 GridBag布局
实例说明
到现在为止,我们已经学习了边框布局、网格布局以及组合布局,现在大家试一试编写一个程序,
怎么样,挺有难度的吧!完成这个GUI得花很多心思去设计组合,十分讨厌,下面我们就使用一个新的布局管理器GridBagLayout来解决这种难题。
首先,输入以下源程序:
源程序:testGridBag.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class testGridBag extends JApplet
{
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridBagLayout());
GridBagConstraints gbdc=new GridBagConstraints();
gbdc.fill=GridBagConstraints.BOTH;
gbdc.weightx=1;
gbdc.weighty=1;
panel1.add(new JButton("No.1"),gbdc);
panel1.add(new JButton("No.2"),gbdc);
panel1.add(new JButton("No.3"),gbdc);
gbdc.gridwidth=2;
gbdc.gridx=0;
panel1.add(new JButton("No.4"),gbdc);
gbdc.gridx=2;
gbdc.gridwidth=1;
gbdc.gridheight=2;
panel1.add(new JButton("No.5"),gbdc);
gbdc.gridx=0;
gbdc.gridheight=1;
panel1.add(new JButton("No.6"),gbdc);
gbdc.gridx=1;
panel1.add(new JButton("No.7"),gbdc);
gbdc.gridx=0;
gbdc.gridwidth=2;
panel1.add(new JButton("No.8"),gbdc);
gbdc.gridx=2;
gbdc.gridwidth=1;
panel1.add(new JButton("No.9"),gbdc);
}
}
在这个程序中,我们使用了GridBagLayout轻松地完成了这个界面的设计,允分凸现出它的强大。可以这么说,GridBagLayout是Java语言中最强大的布局管理器。
GridBagLayout,从名字上看,就知道它与GridLayout有一定的渊源,是的,GridBagLayout的确与其十分类似,也是使用网格来进行布局管理的。但与GridLayout(网格布局)不同的是,GridBagLayout不像网格布局一相,需要所有的部件的大小、形状相同。而且还可以将某一个部件放在一个固定的位置上。
下面,我们一起来分析一下testGridBag.java程序。
1) panel1.setLayout(new GridBagLayout());
在调用setLayout方法时,指定为GridBagLaoyout,使panel1使用GridBag布局管理。
2) GridBagConstraints gbdc=new GridBagConstraints();
GridBagLayout布局管理器是通过一个GridBagConstraints类来实现神奇的效果的。所以,我们要在使用时先定义一个GridBagConstraints类的对象。在这个程序中,我们定义了一个GridBagConstraints类的对象gbdc。
3) gbdc.fill=GridBagConstraints.BOTH;
由于网格单元可能比该单元中的部件大,如果是这样,部件放置在单元格内会有一些多余空间。在默认情况下,部件不会扩张,也就是不会填充这个多余空间。
GridBagConstraints提供了一个fill属性,我们可以通过设置它的值来起到不同的效果。
¨ GridBagConstraints.NONE:不扩张,是默认值;
¨ GridBagConstraints.HORIZONTAL:部件水平扩张,将水平方向的多余空间填满;
¨ GridBagConstraints.VERTICAL:部件垂直扩张,将垂直方向的多余空间填满;
¨ GridBagConstraints.BOTH:部件同时向两个方向扩张,将单元格填满。
4) gbdc.weightx=1;
gbdc.weighty=1;
weightx和weighty是GridBagConstraints提供的另一对属性。它的取值是整型数,默认值为0。用来设置行(weightx)、列(weighty)的“重量”,如果值为0的话,所有的部件都会紧收在一起,聚集在中央,如图10-17所示。
而如果取值为其它数字,则会根据值来分配空间。
5) panel1.add(new JButton("No.1"),gbdc);
panel1.add(new JButton("No.2"),gbdc);
panel1.add(new JButton("No.3"),gbdc);
在没有任何约束的时候,向gbdc中添加按钮,这时效果与采用网格布局的效果完全一样。一个接着一个地“占领”单元格。
6) gbdc.gridwidth=2;
gbdc.gridx=0;
panel1.add(new JButton("No.4"),gbdc);
由于第四个按钮(No.4)是宽度是2,在GridBagLayout中,是由gridwidth属性来控制添加进入的部件的宽度的。
我们通过gbdc.gridwidth=2将其设置为2,这样,再添加进入的部件就会变成为2个单元格的宽度。
另外,我们再使用gbdc.gridx=0让其另起一行,从最左边的单元格开始填充。
因此,我们发现第四个按钮被加在了第二行,宽度为2个单元格。
7) gbdc.gridx=2;
gbdc.gridwidth=1;
gbdc.gridheight=2;
panel1.add(new JButton("No.5"),gbdc);
接下来,我们要摆放第五个按钮,这个按钮将从第3个单元开始填充,其宽度为一个单元格,而高度则为两个单元格。
因此,我们首先使用用gbdc.gridx=2,使得下一个添加的部件(第五个按钮)放入第3个单元格(0代表第1个单元格,因此第3个单元格应该是2)。
由于,前面我们已经将gridwidth设置为2了,因此,我们需要使用gbdc.gridwidth=1,将其值设置回1。
最后使用gdbc.gridheight=2,使得添入的部件的单元格纵向跨越两个单元格。
8) gbdc.gridx=0;
gbdc.gridheight=1;
panel1.add(new JButton("No.6"),gbdc);
我想这一段程序,大家应该都不会再有什么理解上的问题了吧!主要提醒大家注意的是,我们使用gbdc.gridheight=1将单元格纵向跨度改成了默认值1。这是因为我们在前面需要时将其改成了2,所以在此需要将其改回来。
实例说明
为了更好地理解这个强大的GridBagLayout布局管理器,我们再来做一个有趣的实验。首先,我们创建一个testGridBag2.java
源程序:testGridBag2.java
import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
public class testGridBag2 extends JApplet
{
public void init()
{
JPanel panel1=(JPanel)getContentPane();
panel1.setLayout(new GridBagLayout());
GridBagConstraints gbdc=new GridBagConstraints();
panel1.add(new JButton("No.1"),gbdc);
panel1.add(new JButton("No.2"),gbdc);
setSize(300,200);
}
}
然后我们使用鼠标改变一下窗口的大小,看一下,这两个按钮有什么变化?你会惊奇地发现,窗口改变了大小,两个按钮的大小却没有变,而且一直呆在正中央的位置。
一些说明:
在这个程序中,我们使用了一个以前没有用过的语句:setsize(300.200),它的功能是在程序中设置窗口的大小。
现在我们对这个程序做一些修改!将添加两个按钮的两条语句:
panel1.add(new JButton("No.1"),gbdc);
panel1.add(new JButton("No.2"),gbdc);
将它们扩展为:
gbdc.weightx=1;
panel1.add(new JButton("No.1"),gbdc);
gbdc.weightx=3;
panel1.add(new JButton("No.2"),gbdc);
为什么会得到这个效果呢?我们在程序中添加按钮的程序段前加入一句:
gbdc.fill=GridBagConstraints.HORIZONTAL;
再重新编译一下程序,再看看程序的输出有什么变化!
在得到结果之前,自己可以想象一下结果,然后看一下程序的实际输出与你的想法是否相吻合。
我们惊奇地发现,第二个按钮,突然变得十分宽起来(如图10-20所示)。这是因为放置第二个按钮的单元格的宽度是3,而第一个按钮的宽度是1。而且,我们又让第二个按钮横向扩展,因此得到了这样的输出结果。
相信实验做到这里,不须我说,大家也会有一些心得体会了。但是GridBagLayout远不止这一点,大家应该多做试验,才能够在真实的使用环境中有效地掌握GridBagLayout。
『叁』 界面设计的简介
UI即 User Interface(用户界面)的简称。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由,充分体现软件的定位和特点。
通过对界面设计不同需求进行的分类以及界面设计元素对用户行为的影响,来研究用户在界面设计中所体现的重要性。交互性已经成为网络界面设计中设计追求的目标。为了使设计满足可用性要求,全面的了解用户特征及多元化要求是十分必要的。这就需要找到正确的方法来记录和实现多元化的用户要求。
界面是人与物体互动的媒介,换句话说,界面就是设计师赋予物体的新面孔。 1.简易性 界面的简洁是要让用户便于使用、便于了解、并能减少用户发生错误选择的可能性。 2.用户语言 界面中要使用能反应用户本身的语言,而不是游戏设计者的语言。 3.记忆负担最小化 人脑不是电脑,在设计界面时必须要考虑人类大脑处理信息的限度。人类的短期记忆极不稳定、有限,24小时内存在25%的遗忘率。所以对用户来说,浏览信息要比记忆更容易。 4.一致性 是每一个优秀界面都具备的特点。界面的结构必须清晰且一致,风格必须与游戏内容相一致。 5.清楚 在视觉效果上便于理解和使用。 6.用户的熟悉程度 用户可通过已掌握的知识来使用界面,但不应超出一般常识。 7.从用户的观点考虑 想用户所想,做用户所做。用户总是按照他们自己的方法理解和使用。
通过比较两个不同世界(真实与虚拟)的事物,完成更好的设计。如:书籍对比竹简。 8.排列 一个有序的界面能让用户轻松的使用。 9.安全性 用户能自由的作出选择,且所有选择都是可逆的。在用户作出危险的选择时有信息介入系统的提示。 10.灵活性 简单来说就是要让用户方便的使用,但不同于上述。即互动多重性,不局限于单一的工具(包括鼠标、键盘或手柄)。 11.人性化 高效率和用户满意度是人性化的体现。应具备专家级和初级玩家系统,即用户可依据自己的习惯定制界面,并
能保存设置。
设计软件:
软件用户界面(Software User Interface)是指软件用于和用户交流的外观、部件和程序等等。如果你经常上网的话,会看到很多软件设计很朴素,看起来给人一种很舒服的感觉;有点软件很有创意,能给人带来意外的惊喜和视觉的冲击;而相当多的软件页面上充斥着怪异的字体,花哨的色彩和图片,给人网页制作粗劣的感觉。软件界面的设计,既要从外观上进行创意以到达吸引眼球的目的,还要结合图形和版面设计的相关原理,从而使得软件设计变成了一门独特的艺术。通常的讲,企业软件用户界面的设计应遵循以下几个基本原则:
1.用户导向原则
设计网页首先要明确到底谁是使用者,要站在用户的观点和立场上来考虑设计软件。要作到这一点,必须要和用户来沟通,了解他们的需求、目标、期望和偏好等。网页的设计者要清楚,用户之间差别很大,他们的能力各有不同。比如有的用户可能会在视觉方面有欠缺(如色盲),对很多的颜色分辨不清;有的用户的听觉也会有障碍,对于软件的语音提示反映迟钝;而且相当一部分用户的计算机使用经验很初级,对于复杂一点的操作会感觉到很费力。另外,用户使用的计算机机器配置也是千差万别,包括显卡、声卡、内存、网速、操作系统以及浏览器等都会有不同。设计者如果忽视了这些差别,设计出的网页在不同的机器上显示就会造成混乱。
2.KISS原则
KISS原则就是Keep It Simple And Stupid的缩写,简洁和易于操作是网页设计的最重要的原则。毕竟,软件建设出来是用于普通网民来查阅信息和使用网络服务。没有必要在网页上设置过多的操作,堆集上很多复杂和花哨的图片。该原则一般的要求,网页的下载不要超过10秒钟(普通的拨号用户56 Kbps网速);尽量使用文本链接,而减少大幅图片和动画的使用;操作设计尽量简单,并且有明确的操作提示;软件所有的内容和服务都在显眼处向用户予以说明等。
3.布局控制
关于网页排版布局方面,很多网页设计者重视不够,网页排版设计的过于死板,甚至照抄他人。如果网页的布局凌乱,仅仅把大量的信息堆集在页面上,会干扰浏览者的阅读。一般在网页设计上所要遵循的原理有:
(1)Miller公式。根据心理学家George A.Miller的研究表明,人一次性接受的信息量在7个比特左右为宜。总结一个公式为:一个人一次所接受的信息量为 7±2 比特。这一原理被广泛应用于软件建设中,一般网页上面的栏目选择最佳在5~9个之间,如果软件所提供给浏览者选择的内容链接超过这个区间,人在心理上就会烦躁,压抑,会让人感觉到信息太密集,看不过来,很累。例如Aol点com的栏目设置:Main、MyAol、Mail、People、Search、Shop、Channels和Devices共八个分类。Msn点com的栏目设置:MSN Home、My MSN、Hotmail、Search、Shopping、Money和People & Chat共七项。然而很多国内的软件在栏目的设置远远超出这个区间。
(2)分组处理。上面提到,对于信息的分类,不能超过9个栏目。但如果你的内容实在是多,超出了9个,需要进行分组处理。如果,你的网页上提供几十篇文章的链接,需要每隔7篇加一个空行或平行线做以分组。如果你的软件内容栏目超出9个,如微软公司的软件,共有11个栏目,超过了9个。
4.视觉平衡
网页设计时,也要各种元素(如图形、文字、空白)都会有视觉作用。根据视觉原理,图形与一块文字相比较,图形的视觉作用要大一些。所以,为了达到视觉平衡,在设计网页时需要以更多的文字来平衡一幅图片。另外,按照中国人的阅读习惯是从左到右,从上到下,因此视觉平衡也要遵循这个这个道理。例如,你的很多的文字是采用左对齐〈Align=left〉,需要在网页的右面加一些图片或一些较明亮、较醒目的颜色。一般情况下,每张网页都会设置一个页眉部分和一个页脚部分,页眉部分常放置一些Banner广告或导航条,而页脚部分通常放置联系方式和版权信息等,页眉和页脚在设计上也要注重视觉平衡。同时,也决不能低估空白的价值。如果你的网页上所显示的信息非常密集,这样不但不利于读者阅读,甚至会引起读者反感,破坏该软件的形象。在网页设计上,适当增加一些空白,精炼你的网页,使得页面变的简洁。
5.色彩搭配颜
色是影响网页的重要因素,不同的颜色对人的感觉有不同的影响,例如:红色和橙色使人兴奋并使得心跳加速;黄色使人联想到阳光,是一种快活的颜色;黑颜色显得比较庄重,考虑到你希望对浏览者产生什么影响,为网页设计选择合适的颜色(包括背景色、元素颜色、文字颜色、链节颜色等)。
为方便阅读软件上的信息,可以参考报纸的编排方式将网页的内容分栏设计,甚至两栏也要比一满页的视觉效果要好。另一种能够提高文字可读性的因素是所选择的字体,通用的字体(Arial,Courier New,Garamond,Times New Roman,中文宋体)最易阅读,特殊字体用于标题效果较好,但是不适合正文。如果在整个页面使用一些特殊字体(如Cloister,Gothic,Script,Westminster,华文彩云,华文行楷),这样读者阅读起来感觉一定很糟糕。该类特殊字体如果在页面上大量使用,会使得阅读颇为费力,浏览者的眼睛很快就会疲劳,不得不转移到其他页面。
6.和谐性
通过对软件的各种元素(颜色、字体、图形、空白等)使用一定的规格,使得设计良好的网页看起来应该是和谐的。或者说,软件的众多单独网页应该看起来像一个整体。软件设计上要保持一致性,这又是很重要的一点。一致的结构设计,可以让浏览者对软件的形象有深刻的记忆;一致的导航设计,可以让浏览者迅速而又有效的进入在软件中自己所需要的部分;一致的操作设计,可以让浏览者快速学会在整个软件的各种功能操作。破坏这一原则,会误导浏览者,并且让整个软件显的杂乱无章,给人留下不良的印象。当然,软件设计的一致性并不意味着刻板和一成不变,有的软件在不同栏目使用不同的风格,或者随着时间的推移不断的改版软件,会给浏览者带来新鲜的感觉。
7.个性化
(1)符合网络文化
企业软件不同于传统的企业商务活动,要符合Internet网络文化的要求。首先,网络最早是非正式性、非商业化的,只是科研人员用来交流信息。其次,网络信息是只在计算机屏幕上显示而没有打印出来阅读,网络上的交流具有隐蔽性,谁也不知道对方的真实身份。另外,许多人在上网的时候是在家中或网吧等一些比较休闲,比较随意的环境下。此时网络用户的使用环境所蕴涵的思维模式与坐在办公室里西装革履的时候大相径庭。因此,整个互联网的文化是一种休闲的、非正式性的、轻松活泼的文化。在软件上使用幽默的网络语言,创造一种休闲的、轻松愉快、非正式的氛围会使软件的访问量大增。
(2)塑造软件个性
另外,软件的整体风格和整体气氛表达要同企业形象相符合并应该很好的体现企业CI。在这方面比较经典的案例有:可口可乐个性鲜明的前卫软件Life Tastes Good;工整、全面、细致的通用电气公司软件We bring good things to life(GE带来美好的生活);崇尚科技创新文化的3M公司软件Creating solutions for business、instry and home;刻意扮演一个数字电子娱乐之集大成者的角色,要成为新时代梦想实现者的索尼软件;平易近人、亲情浓郁的通用汽车公司软件体现了以人为本的企业定位和营销策略;服务全面、细致、方便,处处体现宾至如归服务理念的希尔顿大酒店软件。
网页界面设计不同于一般的平面设计,拥有自身的设计特征。网页界面设计应时刻围绕“信息传达”这一主题来进行。目前网页界面传达的信息主要是视觉信息。因此从设计类型上来看,网页界面设计属于视觉传达的领域,故而网页界面设计的主要视觉元素和设计指导原则都要遵循视觉传达的一般规律。网页界面设计师在视觉传达的工作,就是通过有效吸引视线的艺术形式使信息得以清晰、准确、有力地传达。
任何一个成功的产品都是建立在对需求的准确把握之上的。需求分析对于新产品的开发或者已有产品的改进升级是不可缺少的早期环节之一。许多设计项目在还没有很好地理解用户需求甚至几乎对用户需求完全不清。 体现以用户为中心的设计。首先从对用户的调研开始、然后对用户建模、信息概念设计、网站原型设计到用户测试及方案实现,整个设计过程都始终围绕着用户进行,真正做到以用户为中心。保证用户界面运作的一致性是网页界面设计的重点之一。在主页列表框的设计中,如果双击其中的一项,使得某些任务完成。由此双击列表框中的其中的任何一个项,都应该有同样的任务完成。也就是所有窗口按钮的位置设计要达到一致性,提供的标签设计和信息要一致,颜色要一致。用户界面设计的一致性会使得用户对网络界面运作建立起精确的心理模型,以此降低用户培训和支持成本。在页面视觉传达上,从网站的主题内容和定位来决定需要与之前运用的元素保持一致。 减少用户思考的设计。一般的短时记忆只能保持二十秒左右,最长不超过一分钟。在如此短的时间内我们能储存多少信息呢?答案是7士2即5~9个项目,平均为7个项目。可见,人在短时间内注意力是集中和少量的,基于识别的用户界面在很大程度依赖于用户所关心对象的可见性,显示太多的对象和属性会让用户很难找到感兴趣的对象。同时,用户不弃欢经常重复性输入一些信息,如个人账号,安全信息,操作习惯,下次操作行为等,这些占用了用户完成其他重要任务的时间。 明确体现网站的特色服务。用户界面要非常明确地体现网站的特色服务,安排最大的空间并且在最显眼的位置来摆放网站的最大卖点和用户最关心最常用培训系统,而其他用户也会感兴趣的渠道信息、最新共享信息版块和论坛板块等放在界面较显眼的位置。这些都是基本满足用户需求,以用户为中心的界面计。 迎合用户的习惯。迎合用户的习惯,主要为了让用户在操作中简单到极致。作为1个Ul设计人员,我们应当多的去了解用户习惯在什么地方寻找导航栏、习惯把哪部分作为网站的重点,习惯在什么地方点击注册、习惯在什么地方找搜素框、习惯点击什么样的按钮[8]、什么颜色会加速用户的心跳、增强消费的冲动。由此,根据用户的行为习惯,对网站的整体布局进行重新策划,使得简单、简单、再简单、简单到极致,通过清晰的流程和界面,让用户减少对网站的思考以及寻找的时间;让准确的色彩和表述减少用户心理斗争的时间。通过不断地调研,用各种可用性实验来计算用户在每一个界面下所需思考的时间,然后,最好的页面设计的评判标准就是用户耗费时间最少的那个页面 常见问题:
1、字间距太挤或太宽
2、行距太小或太大
3、段距太少或太多
4、每行字数太多或太少