图形

图形
图形

Java图形用户界面设计

2008-1-5来源:Java教程人气:60110

作为一个java程序员,从论坛上感受到使用Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。

一. AWT 和SWING

AWT 和SWING 是Java 设计GUI 用户界面的基础。与AWT 的重量级组件不同,Swing 中大部分是轻量级组件。正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。所以一开始使用AWT 的程序员很快就转向使用Swing 了。

那为什么AWT 组件没有消亡呢?因为Swing 是架构在AWT 之上的,没有AWT 就没有Swing。所以程序员可以根据自己的习惯选择使用AWT 或者是Swing。但是,最好不要二者混用——除开显示风格不同不说,还很可能造成层次 (Z-Order) 错乱,比如下例:

/**

* TestPanels.java

* @author Fancy

*/

import javax.swing.*;

import java.awt.*;

public class TestPanels extends JFrame {

public TestPanels() {

setDefaultClo SEO peration(EXIT_ON_CLOSE);

JPanel panel = new JPanel();

for (int i = 0; i < 2; i++) {

panel.add(new JButton("Button 00" + i));

}

JTextArea textArea = new JTextArea(5, 15);

textArea.setLineWrap(true);

JScrollPane scrollPane = new JScrollPane(textArea);

getContentPane().add(panel, BorderLayout.NORTH);

getContentPane().add(scrollPane, BorderLayout.CENTER);

pack();

}

public static void main(String[] args) {

TestPanels tp = new TestPanels();

tp.show();

}

}

运行这个程序,并用鼠标拖动那个名为“cover”的子窗口,我们会发现一个非常有趣的现象,如图:

显然cover 子窗口是在controls 子窗口之上的,但是它只罩盖住了Swing Button,没有罩盖住 AWT Button。再看一会儿,你是不是有这样一种感觉:Swing Button 是“画”上去的,而AWT Button 则是“贴”上去的。这就是二者混用造成层次错乱的一个例子。

Swing 组件有美观、易用、组件量大等特点,也有缺点——使用 Swing 组件的程序通常会比使用AWT 组件的程序运行更慢。但是大家都还是更喜欢用Swing 组件,原因何在?因为随着计算机硬件的升级,一点点速度已经不是问题。相反的,用户更需要美观的用户界面,开发人员则更需要易用的开发组件。

——好,我这就来教你使用Swing 组件开发图形用户界面的Java 应用程序。二. 框架、监听器和事件

框架(Frame) 是Java 图形用户界面的基础,它就是我们通常所说的窗口,是Windows/XWindow 应用程序的典型特征。说到Windows/XWindow,大家很轻易联想到“事件(Event) 驱动”。Java 的图形用户界面正是事件驱动的,并且由各种各样的监听器(Listener) 负责捕捉各种事件。

假如我们需要对某一个组件的某种事件进行捕捉和处理时,就需要为其添加监听器。比如,我们要在一个窗口(JFrame) 激活时改变它的标题,我们就需要为这个窗口(JFrame 对象) 添加一个可以监听到“激活窗口”这一事件的监听器——WindowListener。

怎么添加监听器呢?这通常由组件类提供的一个addXXXXXListener 的方法来完成。比如 JFrame 就提供有addWindowListener 方法添加窗口监听器 (WindowListener)。

一个监听器经常不只监听一个事件,而是可以监听相关的多个事件。比如WindowListener 除了监听窗口激活事件(windowActivate) 之外,还可以监听窗口关闭事件(windowClosing) 等。那么这些事件怎么区分呢?就靠重载监听器类(Class) 的多个方法(Method) 了,监听器监听到某个事件后,会自动调用相关的方法。我们只要重载这个方法,就可以处理相应的事件了。

不妨先看一个例子:

/**

* TestFrame.java

* @author Fancy

*/

import javax.swing.*;

import java.awt.event.*;

public class TestFrame extends JFrame {

PR ivate int counter = 0;

public TestFrame() {

/* 使用匿名类添加一个窗口监听器 */

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.out.println("Exit when Closed event");

System.exit(0); //退出应用程序

}

public void windowActivated(WindowEvent e) {

setTitle("Test Frame " + counter++); // 改变窗口标题

}

});

setResizable(false); // 设置窗口为固定大小

setSize(200, 150);

}

public static void main(String[] args) {

TestFrame tf = new TestFrame();

tf.show();

}

}

这个例子中,我们设计了一个窗口类(public class TestFrame extends JFrame { ...),并且为这个窗口添加了一个窗口监听器(addWindowListener(new WindowAdapter() ...)。而我们添加的这个窗口监听器主要监听了两个事件:窗口关闭(public void windowClosing(WindowEvent e) ...) 和窗口激活(public void windowActivated(WindowEvent e) ...)。在窗口关闭事件中我们退出了整个应用程序(System.exit(0);),而在窗口激活事件中,我们改变了窗口的标题(setTitle("Test Frame " + counter++);)。最后,我们在main 方法中显示了这窗口类的一个实例,运行得到下图所示的结果:

这个程序的运行结果就是一个什么东西都没有加的框架,也就是一个空窗口。那么,你知道显示一个窗口最主要的几句代码吗?不知道没关系,我来告诉你,显示一个窗口只需要做三件事:生成实例(对象) -> 设置大小-> 显示,相应的,就是下面的三句代码:

JFrame frame = new JFrame("Frame's Title");

frame.setSize(400, 300);

frame.show();

也许你会说:第一句的意思我清楚,第三句的意思我也明白,为什么一定要第二句呢?其实想想也就明白了,叫你画一个没法有大小的矩形你能画出来吗?不能。同样,没有大小的窗口,怎么显示?所以我们需要用setSize(int width, int height) 方法为其设置大小。我们还有另一种方法:用 JFrame 的pack() 方法让它自己适配一个大小。pack() 在多数时候是令人满足的,但有时,它也会让你哭笑不得——多试试就知道了。

在 JFrame 中,我们使用addWindowListener 方法加入一个监听器WindowListener (addWindowListener(new WindowAdapter() ...) 去监听发生在JFrame 上的窗口事件。WindowListener 是一个接口,在java.awt.event 这个包中,但是上例中好象并没有使用WindowListener,而是使用的WindowsAdapter 吧,这是怎么回事?

WindowAdapter 是WindowsListener 接口的一个最简单的实现,也在包java.awt.event 中。假如我们直接使用WindowListener 产生一个匿名类,需要实现它的每一个方法(一共 7 个)。但WindowAdapter 作为WindowListener 最简单的实现,已经实现了它的每一个方法为空方法(即只包含空语句,或者说没有语句的方法)。用WindowAdapter 就只需要重载可能用到的方法(上例中只有 2 个) 就行了,而不需要再去实现每一个方法。优点显而易见——减少代码量。

在 JFrame 上发生的窗口事件(WindowEvent) 包括:

windowActivated(WindowEvent e) 窗口得到焦点时触发

windowClosed(WindowEvent e) 窗口关闭之后触发

windowClosing(WindowEvent e) 窗口关闭时触发

windowDeactivated(WindowEvent e) 窗口失去焦点时触发

windowDeiconified(WindowEvent e)

windowIconified(WindowEvent e)

windowOpened(WindowEvent e) 窗口打开之后触发

上例重载了其中两个方法。假如在上例运行产生的窗口和另外一个应用程序窗口之间往返切换(在 Windows 操作系统中你可以使用Alt+Tab 进行切换)……试试看,你发现了什么?有没有现我们的示例窗口标题上的数字一直在增加,这便是在windowActivated 事件中setTitle("Test Frame " + counter++); 的功劳。

而另一个事件处理函数windowClosing 中的System.exit(0) 则保证了当窗口被关闭时退出当前的Java 应用程序。假如不作这样的处理会怎样呢?试验之后你会发现,窗口虽然关闭了,但程序并没有结束,但此时,除了使用^C 强行结束之外,恐怕也没有其它办法了。所以,这一点非常重要:假如你想在关闭窗口的时候退出应用程序,需要你自己写代码处理 windowClosing 事件。……也不尽然,其实还有另外一个更简单的办法,让JFrame 自己处理这件事——你只需要如下调用JFrame 的setDefaultClose Opera tion 即可:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

我们可以在JFrame 对象中添加AWT 或者Swing 组件。但是,虽然它有add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?

JFrame 有一个Content Pane,窗口是显示的所有组件都是添加在这个Content Pane 中。JFrame 提供了两个方法:getContentPane 和setContentPane 就是用于获取和设置其Content Pane 的。通常我们不需要重新设置 JFrame 的Content Pane,只需要直接获取这个Content Pane 来添加组件等。如:(new JFrame()).getContentPane().add(new Button("test button")); 三. 按钮、切换按钮、复选按钮和单选按钮

按钮,就是按钮,不会连按钮都不知道吧?

切换按钮,有两种状态的按钮,即按下状态和弹起状态,若称为选择状态或未选择状态。

复选按钮,又叫复选框,用一个小方框中是否打勾来表示两种状态。

单选按钮,又叫收音机按钮,以小圆框打点表示被选中。常成组出现,一组单选按钮中只有一个能被选中。

发现什么了吗?——对了,这一部分是在讲各种各样的按钮,而且后三种按钮都有两种状态。先看看这些按钮都长成什么样:

上图中,从上到下,依次就是按钮、切换按钮、复选按钮和单选按钮。图示的窗口,就是下面这个例子的运行结果:

/**

* TestButtons.java

* @author Fancy

*/

import javax.swing.*;

import java.awt.event.*;

public class TestButtons {

JFrame frame = new JFrame("Test Buttons");

JButton jButton = new JButton("JButton"); //按钮

JToggleButton toggle = new JToggleButton("Toggle Button"); //切换按钮JCheckBox checkBox = new JCheckBox("Check Box"); //复选按钮JRadioButton radio1 = new JRadioButton("Radio Button 1"); //单选按钮JRadioButton radio2 = new JRadioButton("Radio Button 2");

JRadioButton radio3 = new JRadioButton("Radio Button 3");

JLabel label = new JLabel("Here is Status, look here."); //不是按钮,是静态文本

public TestButtons() {

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().setLayout(new java.awt.FlowLayout());

/* 为一般按钮添加动作监听器*/

jButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

label.setText("You clicked jButton");

}

});

/* 为切换按钮添加动作监听器 */

toggle.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

JToggleButton toggle = (JToggleButton) ae.getSource();

if (toggle.isSelected()) {

label.setText("You selected Toggle Button");

} else {

label.setText("You deselected Toggle Button");

}

}

});

/* 为复选按钮添加条目监听器 */

checkBox.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e) {

JCheckBox cb = (JCheckBox) e.getSource();

label.setText("Selected Check Box is " + cb.isSelected()); }

});

/* 用一个按钮组对象包容一组单选按钮*/

ButtonGroup group = new ButtonGroup();

/* 生成一个新的动作监听器对象,备用*/

ActionListener al = new ActionListener() {

public void actionPerformed(ActionEvent ae) {

JRadioButton radio = (JRadioButton) ae.getSource();

if (radio == radio1) {

label.setText("You selected Radio Button 1");

} else if (radio == radio2) {

label.setText("You selected Radio Button 2");

} else {

label.setText("You selected Radio Button 3");

}

}

};

/* 为各单选按钮添加动作监听器*/

radio1.addActionListener(al);

radio2.addActionListener(al);

radio3.addActionListener(al);

/* 将单选按钮添加到按钮组中 */

group.add(radio1);

group.add(radio2);

group.add(radio3);

frame.getContentPane().add(jButton);

frame.getContentPane().add(toggle);

frame.getContentPane().add(checkBox);

frame.getContentPane().add(radio1);

frame.getContentPane().add(radio2);

frame.getContentPane().add(radio3);

frame.getContentPane().add(label);

frame.setSize(200, 250);

}

public void show() {

frame.show();

}

public static void main(String[] args) {

TestButtons tb = new TestButtons();

tb.show();

}

}

除一般按钮外,其余三种按钮都有两种状态,即选择(按下) 状态和未选择(弹起) 状态。那么我们又该如何判定呢?切换按钮(JToggleButton) 提供了一个isSelected() 方法用来判定当前所处的状态,返回值为真 (true) 时表示它处于选择状态,返回值为假(false) 时表示它处于未选择状态。而复选按钮(JCheckBox) 和单选按钮 (JRadioButton) 都是从JToggleButton 继续的,所以也具有isSelected() 方法。如上例中if (toggle.isSelected()) { ... 等。

单选按钮由自身的特点决定了它们必须成组出现,而且一组中只能有一个能被选中。因此我们需要用一个专门的类——ButtonGroup——来治理。添加到ButtonGroup 的多个单选按钮中,假如有一个被选择中,同组中的其它单选按钮都会自动改变其状态为未选择状态。在ButtonGroup 中添加按钮,是使用它的add 方法,如上例中的

group.add(radio1);。

既然我们已经将多个单选按钮添加到一个ButtonGroup 中了,那么我们是不是可以将一个包含多个单选按钮的ButtonGroup 对象添加到JFrame 的Content Pane 中,以达到添加其中所有单选按钮的目的呢?不行!ButtonGroup 不是一个可显示的组件,它仅用于治理。所以,在往JFrame 中添加一组JRadioButton 的时候,需要一个一个的添加JRadioButton,而不是笼统的添加一个ButtonGroup。

上例中还用到了 JLabel,这不是按钮,而是一个静态文本组件,主要用于显示提示文本。要获得一个JLabel 对象当前显示的文本内容,可以使用它的getText() 方法;反之,要改变一个JLabel 对象显示的文本内容,应该使用它的setText(String text) 方法,如上例中的label.setText("You selected Toggle Button");。

其实这两个方法同样可以用于JButton 等类。比如上例中我们使用new JButton("JButton") 构造了一个按钮jButton,假如使用jButton.getText() 就可以得到字符串"JButton"。而jButton.setText("A Button"),则可以改变按钮上显示的文字为"A Button"。这两句代码没有写出来,你可以自己试试。

上例中大量使用了动作监听器(ActionListener)。ActionListener 只监听一个事件,这个事件在其相关组件上产生了动作时被触发,因此叫作动作事件(ActionEvent)。ActionListener 只有一个方法需要实现,就是

actionPerformed(ActionEvent ae)。按钮、切换按钮和单选按钮被单击时都会触发动作事件,引起动作监听器调用actionPerformed 方法。因此,假如你想在单击按钮之后做什么事,当然应该重载ActionListener 的actionPerformed 方法了。各种按钮都提供了addActionListener 方法以添加动作监听器。

复选框就要非凡一些。虽然它也有addActionListener 方法,意味着可以使用动作监听器,但是使用之后你会发现动作监听器并没有起到预想的作用。为什么?原来,单击一个复选按钮,触发的不是动作事件,而是条目事件(ItemEvent) 中的状态变化 (itemStateChanged) 事件,由条目监听器 (ItemListener) 监听,相应需要重载的方法是ItemListener 的itemStateChanged 方法。

上例中我们将一个名为al 的 ActionListener 添加到了每一个单选按钮中,如何判定是哪个单选按钮触发了事件并被al 监听到了呢?我们可以从ActionEvent 的getSource() 方法得到触发事件单选按钮。由于getSource() 返回的是一个Object 引用,虽然这个引用指向的是一个单选按钮的实例,但我们还是需要将这个引用的类型转换为JRadioButton,如上例中的:JRadioButton radio = (JRadioButton) ae.getSource();,只有这样我们才能调用JRadioButton 有而Object 没有的方法。

同时,还需要说明的一点是,每个单选按钮都可以添加一个单独的ActionListener 实例,而不一定要添加同一个。同样的道理,若干毫不相干的、需要添加ActionListener 的若干组件,也可以添加同一个ActionListener 实例。要害在于编程者对actionPerformed 方法的重载。比如下面这段代码就为一个JButton 对象和一个JRadioButton 对象添加了同一个动作监听器实例:

/**

* Test.java

* @author Fancy

*/

import javax.swing.*;

import java.awt.event.*;

public class Test {

JButton b;

JRadioButton rb;

public Test() {

JFrame f = new JFrame("Test");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().setLayout(new java.awt.FlowLayout());

b = new JButton("JButton");

rb = new JRadioButton("RadioButton");

ActionListener a = new ActionListener() {

public void actionPerformed(ActionEvent ae) {

if (ae.getSource() == b) {

System.out.println("You clicked the JButton");

} else {

System.out.println("You clicked the RadioButton");

}

}

};

b.addActionListener(a);

rb.addActionListener(a);

f.getContentPane().add(b);

f.getContentPane().add(rb);

f.pack();

f.show();

}

public static void main(String[] args) {

new Test();

}

}

运行程序后,分别单击两个按钮,相应的,在控制台能分别得到如下输出:

You clicked the JButton

You clicked the RadioButton

这说明多个不用的组件添加同一个监听器是可行的——不过前提是这些组件都能添加这个监听器。四. 文本输入框、密码输入框

文本输入框包括两种,单行文本输入框(JTextField) 和多行文本输入框 (JTextArea)。密码输入框则只有一种(JPass Word Field)。JPasswordField 是JTextField 的子类,它们的主要区别是JPasswordField 不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如'*'。

下面的示例图和代码是JTextField、JPasswordField 和JTextArea 的示例:

/**

* TestTexts.java

* @author Fancy

*/

import javax.swing.*;

import javax.swing.event.*;

public class TestTexts extends JFrame {

private JLabel label = new JLabel("Status");

private JTextField textField;

private JPasswordField pwdField;

private JTextArea textArea;

public TestTexts() {

super("Test Texts");

setDefaultCloseOperation(EXIT_ON_CLOSE);

getContentPane().setLayout(new java.awt.FlowLayout());

textField = new JTextField(15);

/* 监听文本光标移动事件 */

textField.addCaretListener(new CaretListener() {

public void caretUpdate(CaretEvent e) {

// 假如改变了内容,就可以即时更新label 显示的内容

label.setText(textField.getText());

}

});

pwdField = new JPasswordField(15);

pwdField.setEchoChar('#');

textArea = new JTextArea(5, 15);

textArea.setLineWrap(true);

getContentPane().add(textField);

getContentPane().add(pwdField);

getContentPane().add(textArea);

getContentPane().add(label);

setSize(200, 200);

}

public static void main(String[] args) {

TestTexts tt = new TestTexts();

tt.show();

}

}

上例中,我们构造了一个宽度为15 个字符的单行文本框(textField = new JTextField(15);),并使用addCaretListener 方法添加了一个 CaretListener (textField.addCaretListener ...)。CaretListener 监听文本光标的移动事件。当用户使用键盘、鼠标等移动了文本光标在 JTextField 中的位置时触发这个事件。我们需要重载

caretUpdate(CaretEvent e) 对事件进行处理(public void caretUpdate(CaretEvent e) ...)。这样,我们可以在这里做类似VB 中TextBox 的OnChange 事件中做的事情。

JTextField 有 5 个构造方法,常用其中的四个:

JTextField()

JTextField(int columns),如上例textField = new JTextField(15);

JTextField(String text)

JTextField(String text, int columns)

其中,参数text 是单行文本框的初始内容,而columns 指定了单行文本框的宽度,以字符为单位。JTextField 中的文本内容可以用getText() 方法获得。也可以用setText 方法指定JTextField 中的文本内容。

JPasswordField 是JTextField 的子类,其构造方法也是类似的。JPasswordField 提供了 setEchoChar(char ch) 方法设置为了隐藏密码而显示的字符,默认为'*' 字符,上例中则设置为了'#' 字符(pwdField.setEchoChar('#');)。与JTextField 一样,JPasswordField 也用getText 方法和setText 获得或者设置文本内容 (当然在用户界面上是隐藏的)。

JTextField 是单行文本框,不能显示多行文本,假如想要显示多行文本,就只好使用多行文本框JTextArea 了。JTextArea 有六个构造方法,常用的也是四个:

JTextArea()

JTextArea(int rows, int columns)

JTextArea(String text)

JTextArea(String text, int rows, int columns)

text 为JTextArea 的初始化文本内容;rows 为JTextArea 的高度,以行为单位;columns 为 JTextArea 的宽度,以字符为单位。如上例中就构造了一个高 5 行,宽15 个字符的多行文本框(textArea = new JTextArea(5, 15);)。

多行文本框默认是不会自动折行的 (不过可以输入回车符换行),我们可以使用 JTextArea 的setLineWrap 方法设置是否答应自动折行。setLineWrap(true) 是答应自动折行,setLineWrap(false) 则是不答应自动折行。多行文本框会根据用户输入的内容自动扩展大小,不信,自己做个实验——假如不自动折行,那么多行文本框的宽度由最长的一行文字确定的;假如行数据超过了预设的行数,则多行文本框会扩展自身的高度去适应。换句话说,多行文本框不会自动产生滚动条。怎么办?后面讲到滚动窗格(JScrollPane) 的时候,你就知道了。

多行文本框里文本内容的获得和设置,同样可以使用getText 和setText 两个方法来完成。五. 窗格、滚动窗格和布局治理

窗格(JPanel) 和滚动窗格(JScrollPane) 在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。这里所谓的布置和安排,就是布局(Layout),因此不得不先说说布局。

将加入到容器(通常为窗口等) 的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。布局由布局治理器 (Layout Manager) 来治理。那么,我们在什么时候应该使用布局治理器?应用选择哪种布局治理器?又该怎样使用布局治理器呢?

往往,我们设计一个窗口,其中是要添加若干组件的。为了治理好这些治理的布局,我们就要使用布局治理器。比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。这些组件是让Java 自己任意安排呢?还是按照一定的位置关系较规范的安排呢?当然应该选择后者。那么,为了按照一定的位置关系安排这些组件,我们就需要用到布局治理器了。

然后我们碰到了一个选择题——使用哪种布局治理器。为此,我们首先要知道有些什么布局治理器,它们的布局特点是什么。常用的布局治理器有:FlowLayout、BorderLayout、GridLayout、BoxLayout 等,其中FlowLayout 和BorderLayout 最常用,本文主要也就只谈谈这两种布局治理器。下面列表说明它们的布局特点:

布局治理器布局特点 FlowLayout 将组件按从左到右从上到下的顺序依次排列,一行不能放完则折到下一行继续放置BorderLayout 将组件按东、南、西、北、中五个区域放置,每个方向最多只能放置一个组件GridLayout 形似一个无框线的表格,每个单元格中放一个组件BoxLayout 就像整洁放置的一行或者一列盒子,每个盒子中一个组件就上述的编辑器为例,假如选用FlowLayout,那么两个按钮和一个多行文本框就会排列在一行——当然这是窗口足够宽的情况;假如窗口稍窄一些,则可能分两行排列,第一行有两个按钮,而第二行是多行文本框——这是最理想的情况;假如窗口再窄一些,就可能分三行排列,第一行和第二行分别放置一个按钮,第三行放置多行文本框。因此,假如窗口大小可以改变,那么三个组件的位置关系也可能随着窗口大小的变化而变化。所以,FlowLayout 不适用。其实上面所举的例程中,大部分都是用的FlowLayout,那是因为我们没有要求组件的布局。

假如选用BorderLayout 的情况又如何呢?我们可以试着加入一个窗格 (JPanel,稍后讲解),并将两个按钮放置在

其中,然后将这个窗格加入到BorderLayout 的北部(即上部);再将多行文本框加入到BorderLayout 中部。结果类似使用FlowLayout 的第二种可能,是最理想的情况。而且,假如改变窗口大小,它们的位置关系仍然是北-中的关系,不会随之改变。

剩下的两种布局治理器,加以窗格 (JPanel) 的配合,也能够很好的安排上述编辑器所需的三个组件。但是由于它们的使用稍为复杂一些,所以就不讲了。下面就讲讲如何使用 FlowLayout 和BorderLayout。

任何布局治理器,都需要用在容器上,比如 JFrame 的Content Pane 和下面要说的JPanel 都是容器。容器组件提供了一个setLayout 方法,就是用来改变其布局治理器的。默认情况下,JFrame 的Content Pane 使用的是BorderLayout,而JPanel 使用的是FlowLayout。但不管怎样,我们都可以调用它们的setLayout 方法来改变其布局治理器。比如上述的编辑器中,我们要让窗口(JFrame 对象,假设为frame) 使用BorderLayout,就可以使用frame.getContentPane().setLayout(new BorderLayout()); 来改变其布局治理器为一个新的BorderLayout 对象。

然后,我们对布局治理器的直接操作就结束了,剩下的只需要往容器里添加组件。假如使用 FlowLayout,我们只需要使用容器的add(Component c) 方法添加组件就行了。但是,假如使用BorderLayout 就不一样了,因为要指定是把组件添加到哪个区域啊。那我们就使用容器的add(Component c, Object o) 方法添加组件,该方法的第二个参数就是指明添加到的区域用的。例如,上述编辑器中要添加一个多行文本框到BorderLayout 的中部,就可以用

frame.getContentPane().add(new JTextArea(5, 15), BorderLayout.CENTER) 来实现。

BorderLayout 的五个区域分别是用下列五个常量来描述的:

BorderLayout.EAST 东

BorderLayout.SOUTH 南

BorderLayout.WEST 西

BorderLayout.NORTH 北

BorderLayout.CENTER 中

刚才已经提到了使用JPanel。JPanel 作为一个容器,可以包容一些组件,然后将这个JPanel 对象作为一个组件添加到另一个容器(称作父容器) 中。这个功能有什么好处呢?

上面不是提到BorderLayout 的一个区域中只能添加一个组件吗?但是我们的编辑器需要添加两个按钮到它的北部,怎么办?上面的例子中,我们就是用的一个 JPanel 包容了这两个按钮,然后再将这个JPanel 对象作为一个组件添加到设置布局治理器为BorderLayout 的Content Pane 中。

上面说到各布局治理器的布局特点的时候,几乎每一种都是一个区域只能添加一个组件,那我们想添加多个组件到一个区域的时候,就要用到JPanel 了。假如还没有明白,稍后看一段程序可能更易于理解。

而滚动窗格(JScrollPane) 呢?它是一个能够自己产生滚动条的容器,通常只包容一个组件,并且根据这个组件的大小自动产生滚动条。比如上面讲JTextArea 的时候提到:JTextAera 会随用户输入的内容自动扩展大小,很轻易打破各组件的布局。但是,假如我们将它包容在一个滚动窗格中,它的扩展就不会直接反映在大小的变化上,而会反映在滚动窗格的滚动条上,也就不会打破各组件的布局了。稍后的例子会让你清清楚楚。

是不是等着看例子了?好,例子来了:

/**

* TestPanels.java

* @author Fancy */

import javax.swing.*;

import java.awt.*;

public class TestPanels extends JFrame {

public TestPanels() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel panel = new JPanel();

for (int i = 0; i < 2; i++) {

panel.add(new JButton("Button 00" + i));

}

JTextArea textArea = new JTextArea(5, 15);

textArea.setLineWrap(true);

JScrollPane scrollPane = new JScrollPane(textArea);

getContentPane().add(panel, BorderLayout.NORTH);

getContentPane().add(scrollPane, BorderLayout.CENTER);

pack();

}

public static void main(String[] args) {

TestPanels tp = new TestPanels();

tp.show();

}

}

这个例子的运行结果如下图,正是我们想要的结果——上面两个按钮,下面是一个可以滚动的多行文本框:

上例中首先产生了一个JPanel 对象 (JPanel panel = new JPanel();),然后将两个按钮置于其中 (panel.add ...);然后产生了一个多行文本框(JTextArea textArea = new JTextArea(5, 15);),并使用一个滚动窗格将它包裹起来(JScrollPane scrollPane = new JScrollPane(textArea);),使之成为可以滚动的多行文本框。最后将两个容器 (JPanel 对

象和JScrollPane 对象) 分别添加到了窗口的北部(getContentPane().add(panel, BorderLayout.NORTH);) 和中部 (也就是剩余部分,getContentPane().add(scrollPane, BorderLayout.CENTER);)。

似乎有点不对劲,是什么呢?对了,我们没有设置Content Pane 的布局治理器为BorderLayout 啊,为什么……刚才不是说了吗,JFrame 的Content Pane 的默认布局治理器就是BorderLayout,所以不用再设置了。

好了,《Java 的图形用户界面设计》就告一段落了。由于篇幅有限,这里说的都是初级知识,有此基础,设计复杂一点的图形用户界面也就不是难事了!

电气制图及图形符号国家标准

电气制图及图形符号国 家标准 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT

常用“电气制图及图形符号国家标准” 有关规定“煤矿电气图专用符号”规定

前言 煤矿供电系统图,排水系统图是煤矿安全规程要求必备的图纸,是指导矿井安全生产的重要图纸资料。图纸要求必须全面、准确、无误的反映现场的实际情况。图纸的绘制应符合国家及行业的标准要求。经多次检查各矿的供电系统图、排水系统图一矿一个样,图纸的图幅、画法、字体、标注、符号等很不统一,不符合制图及图形符号国家标准,及煤矿电气图专用图形符号企业标准。为使各矿两种图纸达到标准要求,现将《电气制图及图形符号国家标准汇编》和《煤矿电气图专用图形符号》及排水管道图形有关符号择录如下:

目录 一、统一图幅 1 二、统一画法 2 三、统一图形符号 4 符号要素、限定符号和常用的其他符号 4 导线和连接器件 8 无源元件 12 半导体管和电子管 15 电能的发生和转换 19 开关、控制和保护装置 23 GB4726-83 电气接线端子识别和字母数字符号标志、 接线端子通则 32 煤矿电气图用图形符号 34

电气制图及图形符号国家标准汇编 电气制图及图形符号国家标准汇编,16开幅页共531页。厚厚的一本,规定了电气制图及图形符号各种要求画法及规则。这么厚的一本,难以记忆,我们仅挑选了与矿山电气制图常用的有关图形符号掌握使用,达到统一图幅、统一画法、统一符号的目的。 一、统一图幅 1、电气制图一般规定:图纸幅面尺寸及代号见表1 表1 2、如果需要加长的图纸,应采用表2中所规定的图幅 表2 3、如果表1和表2所列幅面仍不能满足要求时,一是可按照《机械制

图形图像处理技术实训报告参考

武汉科技大学城市学院 实训报告 课程名称图形图像处理技术实训 题目photoshop图像处理综合设计 学部城市学院信息工程学部 专业电子商务(专) 班级1班 姓名姚一杰 指导教师邓娟 2015 年 6 月26 日

实训评分表

图形图像处理技术实训任务书 题目: photoshop图像处理综合设计 一. 实训教学条件要求 实训要求学生一人一组,独立完成,机房需要有安装photoshop cs5以上版本的计算机提供实训使用。 二. 实训任务 整体要求: 在完成每一个任务的时候,都要求认真审题,严格按照任务书要求完成设计,设计要与主题相符,有整体性的策划及设计,切忌堆砌图片,要有艺术创作的能力,设计过程中的步骤请在制作过程中边做边截图保存在实训报告书中,以便能更方便完成报告。设计时,所有作品留3mm的出血。 本实训要求自选两个主题完成系列海报的设计,设计过程中要求自己根据所选的题目搜集素材,制作海报的模板,并根据自己设计的海报模板完成系列海报内容。要求注意的是,系列海报可以是模板相同,模板类似或者风格一致均可,可以参考素材,但是必须原创。最后完成实训报告书并打印上交。 可选题目: 一、中国民族题材 本题材主要是用中国传统元素来综合表达出某一主题,表达出所选主题的系列作品。 1.中国传统文化(传统节日习俗、传统饮食文化、传统精神、传统书籍(国学分类)、 传统美德、古代科技、书法汉字、传统工艺(木版年画、扑灰画、纸马、内画、泥 塑、面塑、糖塑、吹糖人、砖雕、瓷刻、微雕、木偶、皮影、蜡染、刺绣、织锦、 剪纸、风筝、脸谱、面具)、传统戏曲、茶文化等) 2.中国历史人物(名著人物、名族英雄、杰出女性等) 3.中国神话传说(神话传说人物、神话故事等) 4.中国品牌(中国老字号) 5.中国梦(中国梦主题相关均可) 6.中国名胜古迹(五岳、湖泊、楼阁、十大名胜古迹、历史遗迹等)

计算机图形学--图形几何变换实现

实验五 图形几何变换的实现 班级:信计二班 学号: :解川 分数: 一、实验目的 为了掌握理解二维、三维的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用VC++语言实现二维、三维图形的基本变换与复合变换。 二、实验容 (1) 理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换 得以实现。 (2) 掌握二维、三维图形基本变换的原理及数学公式。 (3) 利用VC++语言实现二维、三维图形的基本变换、复合变换,在评不上显 示变换过程或变换结果。 三、实验步骤 (1) 预习教材关于二维、三维图形变换的原理与方法。 (2) 使用VC++语言实现某一种或几种基本变换。 (3) 调试、编译、运行程序。 四、原理分析 源程序分别实现了对二维图形进行的平移变换—基本变换;对三维图形进行的绕某一个坐标轴旋转变换以及相对于立方体中心的比例变换—复合变换。 三维几何变换: (1) 比例变换: []1111z y x =[]1z y x T 3D =[]1z y x ????? ?? ?? ???s n m l r j i h q f e d p c b q 局部比例变换: s T =? ? ??? ???? ???1000000000000j e a 其中a 、b 、j 分别为在x 、y 、z 方向的比例系数。

整体比例变换: s T =? ? ??? ???? ???s 000010000100001其中s 为在xyz 方向的等比例系数。S>1时,整体缩小;s<1时,整体放大。 (2) 旋转变换: 旋转变换的角度方向为(沿坐标轴的反方向看去,各轴按逆时针方向旋转) 绕z 轴旋转: RZ T =?? ??? ???? ???-100 010000cos sin 00sin cos θθθθ 绕x 轴旋转: RX T =??????? ?? ???-10 00 0cos sin 00sin cos 000 01 θθθθ 绕y 轴旋转: RY T =????? ???? ???-10 0cos 0sin 00100sin 0cos θθθθ 程序代码: /*三维图形(立方体)旋转变换、比例变换*/ #include #include #include #include #include #include #define ZOOM_IN 0.9 #define ZOOM_OUT 1.1

计算机图形学 图形几何变换的实现

计算机图形学图形几何变换的实现

————————————————————————————————作者:————————————————————————————————日期:

实验五图形几何变换的实现 班级08信计2 学号89姓名徐阳分数 一、实验目的和要求: 1、掌握理解二维、三维变换的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用Turboc实现二维、三维图形的基本变换和复合变换。 二、实验内容: 1、理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换得以实现。 2、掌握二维、三维图形基本变换(平移、缩放、对称、旋转、错切)的原理及数学公式。 3、利用Turboc实现二维、三维图形的基本变换、复合变换,在屏幕上显示变换过程或变换结果。 三、实验结果分析: 程序代码如下: /*二维图形(直线)平移变换*/ #include #include #include main() {int x0,y0,x1,y1,i,j; int a[3][3]; char key; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=0; for(i=0;i<3;i++) a[i][i]=1; int graphdriver=DETECT; int graphmode=0; initgraph(&graphdriver,&graphmode," "); cleardevice(); x0=250;y0=120;x1=350;y1=220; line(x0,y0,x1,y1); for( ; ;) {outtextxy(100,400,"<-:left->:right^:up v:down Esc->exit"); key=getch();

图形符号涉及的国家标准

图形符号涉及的国家标准 GB/T 10001.1-2006 标志用公共信息图形符号第1部分: 通用符号 GB/T 10001.2-2006 标志用公共信息图形符号第2部分: 旅游休闲符号 GB/T 10001.3-2011 标志用公共信息图形符号第3部分: 客运货运符号 GB/T 10001.4-2009 标志用公共信息图形符号第4部分:运动健身符号 GB/T 10001.5-2006 标志用公共信息图形符号第5部分: 购物符号 GB/T 10001.6-2006 标志用公共信息图形符号第6部分:医疗保健符号 GB/T 10001.9-2008 标志用公共信息图形符号第9部分: 无障碍设施符号 GB/T 10001.10-2007 标志用公共信息图形符号第10部分: 铁路客运服务符号 GB/T 16903.1-2008 标志用图形符号表示规则第1部分:公共信息图形符号的设计原则GB/T 16903.2-2008 标志用图形符号表示规则第2部分:测试程序 GB/T 5845.2-2008 城市公共交通标志第2部分:一般图形符号和安全标志 GB/T 5845.4-2008 城市公共交通标志第4部分:运营工具、站(码头)和线路图形符号GB/T 14479-1993 传感器图用图形符号 GB/T 3894.6-1984船舶布置图图形符号救生设备 GB/T 3894.9-1986船舶布置图图形符号起货设备 GB/T 4791-2005船舶管路附件图形符号 GB/T 27889-2011船舶和海上技术导航术语、缩略语、图形符号和概念 GB/T 3895-1983船舶甲板敷料和绝缘材料图形符号 GB/T 4299-2008船舶通风系统图形符号

计算机图形学图形的几何变换的实现算法

实验二 图形的几何变换的实现算法 班级 08信计 学号 59 姓名 分数 一、实验目的和要求: 1、掌握而为图形的基本几何变换,如平移,旋转,缩放,对称,错切变换;。 2、掌握OpenGL 中模型变换函数,实现简单的动画技术。 3、学习使用OpenGL 生成基本图形。 4、巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可由简单图形得到复杂图形。加深对变换矩阵算法的理解。 编制利用旋转变换绘制齿轮的程序。编程实现变换矩阵算法,绘制给出形体的三视图。调试程序及分析运行结果。要求每位学生独立完成该实验,并上传实验报告。 二、实验原理和内容: . 原理: 图像的几何变换包括:图像的空间平移、比例缩放、旋转、仿射变换和图像插值。 图像几何变换的实质:改变像素的空间位置,估算新空间位置上的像素值。 图像几何变换的一般表达式:[,][(,),(,)]u v X x y Y x y = ,其中,[,]u v 为变换后图像像素的笛卡尔坐标, [,]x y 为原始图像中像素的笛卡尔坐标。这样就得到了原始图像与变换后图像的像素的对应关系。 平移变换:若图像像素点 (,)x y 平移到 00(,)x x y y ++,则变换函数为 0(,)u X x y x x ==+, 0(,)v Y x y y y ==+,写成矩阵表达式为: 00x u x y v y ??????=+???????????? 其中,x 0和y 0分别为x 和y 的坐标平移量。 比例缩放:若图像坐标 (,)x y 缩放到( ,x y s s )倍,则变换函数为: 00x y s u x s v y ??????=?????????? ?? 其中, ,x y s s 分别为x 和y 坐标的缩放因子,其大于1表示放大,小于1表示缩小。 旋转变换:将输入图像绕笛卡尔坐标系的原点逆时针旋转θ角度,则变换后图像坐标为: cos sin sin cos u x v y θ-θ??????=??????θθ?????? 内容: 1、对一个三角形分别实现平移,缩放旋转等变化。

图形的分类

一、知识要点 1、图形分类 1、按照不同的标准给已知图形进行分类: (1)按平面图形和立体图形分; (2)按平面图形时否由线段围成来分的; (3)按图形的边数来分。通过自己动手分类,对图形进行再认识,了解图形的特征。 2、了解平行四边形易变形和三角形的稳定性在生活中的应用。 练习: 1.选择。 (1) 平面图形有________________________________________。 立体图形有________________________________________。 2.圆是由_________圈成的,正方形,长方形,三角形是由_______ 组成的 3.四边形易具有,三角形具有。 4.两个完全一样的三角形可以拼成一个()。 2、三角形分类 1、把三角形按照不同的标准分类,并说明分类依据。 (1)按角分,分为:直角三角形、锐角三角形、钝角三角形,并了解其本质特征:三个角都是锐角的三角形是锐角三角形,有一个角是直角的三角形是直角三角形,有一个角是钝角的三角形是钝角三角形。

(2)按边分,分为:等腰三角形、等边三角形、任意三角形。有两条边相等的 三角形是等腰三角形,三条边都相等的三角形是等边三角形。 2、通过分类,弄清等腰三角形和等边三角形的关系:等边三角形是特殊 的等腰三角形。 练习: 一、填空。 1. 三角形有( )个角,( )条边。 2. 三角形最多有( )个锐角,最多有( )个直角,最多有( )个钝角。 3. 三角形按边分类可分为( )三角形、( )三角形。 4. 三角形按角分类可分为( )三角形、( )三角形、( )三角形。 5. 等边三角形又叫( )三角形,它的三条边都( ),三个角也( ),每个 角都是( )度。 6. 等腰三角形两条( )相等,有两个角( ),相等的两个角叫做它的底角。 二、分类: 猜一猜正面被遮住一部分的三角形是什么三角形,选择对应的字母填入括号中。 A . 锐角三角形 B . 直角三角形 C . 钝角三角形 D . 不确定 锐角三角形 直角三角形 钝角三角形 等腰三角形 等边三角形 ( ) ( ) ( ) ②

PHOTOSHOP图形图像处理课程标准

《PHOTOSHOP图形图像处理》课程标准 第一部分前言 一、课程概述 (一)课程性质 图形图像处理作为平面设计领域的重要组成部分,在各行各业中有着广泛的应用。Photoshop 是Adobe公司推出的一款目前非常流行、应用非常广泛的图片处理软件。伴随着计算机的普及和计算机在各行业的广泛应用,Photoshop发挥了越来越大的作用。Photoshop是当今使用最为广泛的的图像处理软件,广泛应用于平面设计等领域。Photoshop图像处理就是借助Photoshop软件来实现图形图像的绘制、图像的编辑、修饰、合成、特效制作、创意设计等。 《Photoshop图形图像处理》课程是计算机类专业一门专业技术必修课程,是培养学生专业能力的核心课程之一。本课程采用理实一体化教学,具有很强的实践性和应用性,它是利用计算机进行平面设计、网页设计、美术设计、多媒体应用软件开发制作的重要基础课程,是从事平面广告设计、包装设计、装饰设计、排版编辑、网页制作、图文印刷、动漫、游戏制作等工作的必备基础课,也是提高学生审美能力、创新能力、设计能力的计算机应用软件的典型课程。 (二)课程目的 该课程针对平面设计师、插画设计师、网络美工、动画美术设计师等工作岗位要求,培养学生图形图像绘制、图像合成、特效制作、产品效果图处理、网页图像处理、VI设计等技能,达到“会、熟、快、美”的岗位要求。通过对Photoshop软件的讲授与学习,让学生达到熟练处理图像与灵活创作设计的要求。学生应掌握平面绘图的方法;掌握图层、通路径等在图像处理中的应用;掌握常用的滤镜效果并在创作中应用;掌握Adobe ImageReady制作动画;掌握图形图像的输出等知识点。使学生掌握图形图像处理的基本理论和基本操作,并具有一定的广告设计和综合创作能力,同时培养学生创新思维能力和健康的审美意识以及团结协作能力,为其成长为一名合格的平面设计与制作人员奠定良好的基础,帮助学生在学习制作图像的过程中,培养审美能力,形成创新意识。 (三)课程定位 《Photoshop图形图像处理》属于一门专业必修课,它前续课程为《计算机应用基础》、《三大构成》等课程;后续课程为《Dreamweaver网页设计》、《Flash二维动画制作》、《3D MAX三维设计》等专业核心课程。在数字媒体制作、动漫设计、游戏软件专业中起承上启下、连贯前后课程,围绕专业核心技能设置的。鉴于计算机图形图像处理的重要意义和在设计中的重要左右,本课程作为平面设计的岗位职业能力培养,可以充分发挥学生的特长,拓展就业渠道。 本课程是数字媒体专业学生专业技能鉴定制定的专业考核技能,是学生必须掌握的职业核心技能,学完本课程后学生完全能够胜任数码照片处理、广告图像处理、VI图形绘制和网页图像处理等职业岗位。 二、课程设计理念 本课程针对高职高专教育教学的特点,以岗位需求为导向,以学生图形图像处理以及平面设计的职业能力培养为目标,以工作过程的系统化和可持续发展为出发点,与企业行业合作共同进行基于工作过程的课程设计开发。根据对学生所从事工作岗位职业能力、工作任务、工作过程的分析,以图形图像处理和平面设计领域的典型工作任务构建教学内容;以真实设计项目和典型案例为载体,采用理实一体化教学模式,基于平面设计实际工作流程设计教学实施过程,创作最佳的基于工作过程的学习环境;以学生为中心,采用项目导向、任务驱动、案例教学等行动导向教学法实施教学,充分调动学生的学习积极性;合理利用网络资源,多渠道拓展职业能力;充分体

图像拼接算法及实现.doc

图像拼接算法及实现(一) 来源:中国论文下载中心 [ 09-06-03 16:36:00 ] 作者:陈挺编辑:studa090420 论文关键词:图像拼接图像配准图像融合全景图 论文摘要:图像拼接(image mosaic)技术是将一组相互间重叠部分的图像序列进行空间匹配对准,经重采样合成后形成一幅包含各图像序列信息的宽视角场景的、完整的、高清晰的新图像的技术。图像拼接在摄影测量学、计算机视觉、遥感图像处理、医学图像分析、计算机图形学等领域有着广泛的应用价值。一般来说,图像拼接的过程由图像获取,图像配准,图像合成三步骤组成,其中图像配准是整个图像拼接的基础。本文研究了两种图像配准算法:基于特征和基于变换域的图像配准算法。在基于特征的配准算法的基础上,提出一种稳健的基于特征点的配准算法。首先改进Harris角点检测算法,有效提高所提取特征点的速度和精度。然后利用相似测度NCC(normalized cross correlation——归一化互相关),通过用双向最大相关系数匹配的方法提取出初始特征点对,用随机采样法RANSAC(Random Sample Consensus)剔除伪特征点对,实现特征点对的精确匹配。最后用正确的特征点匹配对实现图像的配准。本文提出的算法适应性较强,在重复性纹理、旋转角度比较大等较难自动匹配场合下仍可以准确实现图像配准。 Abstract:Image mosaic is a technology that carries on the spatial matching to a series of image which are overlapped with each other, and finally builds a seamless and high quality image which has high resolution and big eyeshot. Image mosaic has widely applications in the fields of photogrammetry, computer vision, remote sensing image processing, medical image analysis, computer graphic and so on. 。In general, the process of image mosaic by the image acquisition, image registration, image synthesis of three steps, one of image registration are the basis of the entire image mosaic. In this paper, two image registration algorithm: Based on the characteristics and transform domain-based image registration algorithm. In feature-based registration algorithm based on a robust feature-based registration algorithm points. First of all, to improve the Harris corner detection algorithm, effectively improve the extraction of feature points of the speed and accuracy. And the use of a similar measure of NCC (normalized cross correlation - Normalized cross-correlation), through the largest correlation coefficient with two-way matching to extract the feature points out the initial right, using random sampling method RANSAC (Random Sample Consensus) excluding pseudo-feature points right, feature points on the implementation of the exact match. Finally with the correct feature point matching for image registration implementation. In this paper, the algorithm adapted, in the repetitive texture, such as relatively large rotation more difficult to automatically match occasions can still achieve an accurate image registration. Key words: image mosaic, image registration, image fusion, panorama 第一章绪论

信息技术类专业知识图形图像处理试题

信息技术类专业知识试题8 本试卷分卷一(选择题)和卷二(非选择题)两部分。满分200分,考试时间120分钟,考试结束后,请将答题卡交回。 卷一(选择题,共100分) 一、 选择题(本大题50小题,每小题2分,共100分,每小题列出的四个选项中,只有一项符合 题目要求,请按要求选出并填写在答题卡上) 1. 以下不属于资源子网的设备是 A.主机 B.无盘工作站 C.带盘工作站 D.光纤 2.一个大型ICP 将相同内容的Web 服务器分布在世界各地,能使不同地域的用户看到相同的页面,这体现了计算机网络的 A.集中管理功能 B.负载均衡功能 C.分布式处理功能 D.资源共享功能 3.在数据传输中,()的传输延迟最小 A.电路交换 B.分组交换 C.报文交换 D.信元交换 4. 关于数据、信息及数据处理,以下说法错误的是 A.信息不随它的数据形式变化而变化 B.信息是数据的载体和具体表现形式 C.同样的信息可用多种不同形式的数据来表示 D.数据处理是指数据转换为信息的过程 5.下列属于物理层的设备是 A 、中继器 B 、光纤 C 、以太网交换机 D 、网关 6.在传输过程中,接受和发送共享同一信道的方式称为 A.单工 B.半双工 C.双工 D.自动 7.以下拓扑结构中,故障诊断困难的是 A.总线型和星型B.总线型和环型 C.星型和环型 D.总线型和星型环型 8.OSI 的()层主要定义了通信设备与传输线路接口硬件的电气、机械等特性 A.物理层 B.数据链路层 C.传输层 D.网络层 9.在TCP/IP 协议中负责处理路由选择的协议是 A.IP B.ICMP C.ARP D.RARP 10.关于UDP 和TCP 叙述中不正确的是 A.UDP 比TCP 的协议简单,数据传输效率也高 B.UDP 和TCP 均是传输层的协议 C.UDP 是面向连接的服务,而TCP 是面向无连接的服务 D.UCP 一般适应于成批传送大量数据的场所 11.要打印彩色照片,打印机的分辨率最好是 A.600dpi B.1200dpi C.2400dpi D.4800dpi 12.如果CMYK 四种油墨取值均为0%,则生产 A.纯黑色 B.纯红色 C.纯白色 D.纯蓝色 13.哪种模式属于PS 内部模式,并且也是目前色彩范围最广的一种颜色模式 A.RGB B.PSD C.CMYK https://www.360docs.net/doc/3d19129542.html,b 14.在PS 中下列选项中,颜色模式不会影响的是 A.图像分辨率 B.文件大小 C.通道数量 D.颜色数目 15.双击缩放工具,相当于选择视图菜单中的 A.放大 B.缩小C.实际像素D.按屏幕大小缩放 16.在PS 中,下列不能再新建对话框中设置的是 A.文件名称B.图像分辨率 C.背景内容 D.图层名称 17.关于参考线说法错误的是 A. 参考线可以从标尺向图像方向拖动产生 B. 参考线只能使用移动工具进行移动 C. 参考线可以进行锁定 D. 锁定后的参考线不能进行移动和删除 18.在CS6中,要将当前图像保存为另一个文件,可以使用文件菜单中的 A.保存 B.存储 C.存储为 D.另存为 19.下列不属于对面板的操作是 A.展开B.收缩 C.复制 D.拆分 20.以下不是图像窗口的组成部分是 A.标题栏 B.状态栏 C.调板 D.画布 21.在PS 的图层面板中,为了获得图层选区,需要单击相应图层的同时按下 A.Shift B.altC.alt+shift D.ctrl 班级 姓名 考号

图形处理技术

图形处理技术 思考题 1.简述二维图形变换的基本原理、方法、种类。 2.如何理解基本图形变换和组合变换?按所实现的功能分,图形变换可分 为哪些类型? 3.计算机绘图中如何产生三视图? 4.什么是窗口?什么是视区?在CAD/CAM中为什么要进行窗口视区变 换? 课后练习 1.二维图形变换是指对点、线、面进行相关操作,以完成()的改变。 A. 几何位置 B. 尺寸 C. 形状 D. 包括前三项 2.在二维图形的旋转变换中,其旋转中心() A. 只能位于图形边界内 B. 只能位于图形边界外 C. 只能位于坐标原点 D. 可位于任意点 3.在二维图形的坐标变换中,若图上一点由初始坐标(x,y)变换成坐标(x',y'),其中x'=ax+cy,y'=bx+dy;当b=c=0,a=d>1时,则原图形() A. 相对原点缩小 B. 相对原点放大 C. 不变化 D. 绕原点旋转 4.在二维图形变换矩阵c d q 中,参数s可使图形产生()变换。 A. 反射 B. 旋转 C. 错切 D. 全比例 5.已知变换矩阵为T=0 1 0,则图形将() A. 在X方向放大L倍,在Y方向放大M倍 B. 在X方向放大M倍,在Y方向放大L倍 C. 在X方向平移L,在Y方向平移M D. 在X方向平移M,在Y方向平移L

6.对第二象限中的一个点P施以变换T=0 -1 0,则变换后的P点位于() A. 第一象限 B. 第二象限 C. 第三象限 D. 第四象限 7.图形显示中高分辨率与中分辨率的区别之一在于光栅扫描图象终端需要() A. 很大的屏幕 B. 很高的用户水平 C. 很大容量的帧缓冲存贮器 D. 很精确的计算系统 8.在图形显示器上显示圆,其圆弧的精度决定于() A.是整型,还是实型 B.显示器的分辨率 C.圆心坐标的选择 D.是彩色,还是黑白 9.已知变换矩阵T= 0 2 0,则图形将() A. 在X方向放大2倍 B. 在Y方向放大2倍 C. 在X方向平移2 D. 在Y方向平移2 10.已知一点P(x,y)关于直线y=a+bx作对称变换,则首先变换的是() A. 将点平移到原点 B. 让直线移动经过该点 C. 将点移到直线上 D. 将直线移动经过原点

正负图形教案

《正负图形》教学设计 王丽黎 一、教学目标 1、欣赏大师的作品,初步了解正负图形的概念,正形与负形之间的关系。 2、能设计出简单的正负图形。 3、感受正负图形的独特魅力,拓展创新思维。能将正负形的设计方法学以致用 于生活。 二、教学重点、难点 重点:学生通过赏析正负图形及第一次作业,了解正负图形的概念及基本设计方法。 难点:学生通过赏析、分析案例及第二次作业,能够尝试运用正负形创意手法设计出有一定关联的图形。学生能将正负形的设计方法学以致用于生活。 三、教学准备 (学生)2张卡纸、黑色记号笔、铅笔等 (教师)课件、卡纸、记号笔等 四、教学过程 1、了解正负形的概念 (1)圣诞帽 圣诞帽的挂图,画出铃铛,引出正负图形的概念, (2)剪纸 教师剪出鲁宾杯。 【设计意图】通过观察分析,引出正形和负形,学生明白正负形的概念。 (3)揭示课题 正负图形。 (4)欣赏大师埃舍尔的作品 师简单介绍《骑士》和它的画家——埃舍尔。提问:它们之间有个共同的特征?让学生思考。正负图形如何共同存在于一副画中?他是怎么来表现的?(都有一条共同的轮廓线,来连接正形与负形。 【设计意图】通过欣赏,学生初步了解埃舍尔,认识了正负图形带来的视觉变化。通过观察天与水,开始关注鱼和雁的共生问题。 2、关注正负形的共生问题 (1)分析太极图

<课件演示图>教师提问:“太极的正负图形是如何共生的?”因为他们有一条共同的线,这条线即是正形的轮廓线,也是负形的轮廓线。有此得出结论:他们共用一条轮廓线。 (2)学生感悟 学生来找共同轮廓线,上来演示画出鲁宾杯的共同轮廓线。 (3)欣赏优秀作品 欣赏正负图形<图9、图10>,寻找共同轮廓线,重点《百货公司海报》做简单介绍。师提问:“你们知道为什么这张海报用那么多脚来表现吗?” 【设计意图】寻找共同轮廓线,使学生学会观察、理解正负图形的含义,重点介绍《百货公司海报》,为接下来正负图形之间的关系打下伏笔。 3、第一次作业 (1)作业1: 我们以“人脸”为负形,人脸线做共同轮廓线,以其他图形为正形,设计一个奇特的正负图形。参考图如下: (图11)(图12) (2)学生作业,教师指导 (3)评价作业 【设计意图】初次设计正负图形,主要让学生运用正负形轮廓线,检验学生是否有设计的能力,为第二次作业做准备。 4、正负形的关系 正、负形像好朋友,那正形喜欢找什么样的负形做好朋友呢? <出示图13>,师问鲨鱼有什么特征?(凶恶,吃人,牙齿很锋 利等) 师问:“我们给鲨鱼牙齿添加白色的负形,你们会选什么?” A:鱼骨B:一条鱼c:松树 学生研究,决定选择A。因为鱼骨的外形与鲨鱼牙齿形状接近, 而且鲨鱼爱吃鱼,它们之间有关联。 通过分析,得出结论:正负形的关系:形相近,有关联。 (2)欣赏评析 说说下面的正形选择哪些形相近,有关联的负形来设计的?为什么选择?

PhotoShop图形图像处理技术课程标准

《Photoshop图像处理》课程标准 一、概述 (一)课程性质(课程性质和价值) 《Photoshop图像处理》是计算机应用专业的一门专业基础课。本课程以图像处理为基本点。主要任务是使学生了解和掌握图像处理软件Photoshop工具的基本操作技能。目的是让学生理解图像色彩原理,掌握图像处理的知识和技术,学会各种工具和滤镜的使用。在此基础上,提高分析问题和解决问题的能力;提高学生的艺术修养,并为后续的专业课程奠定基础,使他们具有进一步学习相关知识的能力。 (二)课程基本理念 按照“以能力为本位、以职业实践为主线、以项目课程为主体的模块化专业课程体系”的总体设计要求,该门课程以学会Photoshop软件的使用,形成图像处理的基本操作技能为基本目标,彻底打破学科课程的设计思路,紧紧围绕工作任务完成的需要来选择和组织课程内容,突出工作任务与知识,增强课程内容与职业岗位能力要求的相关性,提高学生的就业能力。 学习项目选取的基本依据是该门课程涉及的工作领域和工作任务范围,但在具体设计过程中,还根据平面装潢设计专业的典型设计为载体,使工作任务具体化,产生了具体的学习项目。其编排依据是该职业所特有的工作任务逻辑关系,而不是知识关系。 依据工作任务完成的需要、职业学校学生的学习特点和职业能力形成的规律,按照“学历证书与职业资格证书嵌入式”的设计要求确定课程的知识、技能等内容。 依据各学习项目的内容总量以及在该门课程中的地位分配各学习项目的学时数。 学习程度用语主要使用“了解”、“理解”、“能”或“会”等用语来表述。“了解”用于表述事实性知、识的学习程度,“理解”用于表述原理性知识的学习程度,“能”或“会”用于表述技能的学习程度。

数图形的两种基本方法

数图形的两种基本方法 数图形属于“计数”的范畴。通常,计数有两种基本方法,一种是“分类计数”,一种是“分步计数”。分类计数的理论基础是“加法原理”,分步计数的理论基础是“乘法原理”。具体采用什么方法,要根据图形的构成特点和学生的能力水平适当选择。如: 题目:正五边形和它的对角线可以形成多少个三角形? 一.分类计数 方法一:按组成分类。 (1)单一的三角形(△ABF、△AFJ、△AJE……)有10个; (2)由2部分组成的三角形(△ABJ、△AFE……)有10个; (3)由3部分组成的三角形(△ABE、△BEH……)有10个; (4)由5部分组成的三角形(△ACD……)有5个。 总共有10+10+10+5=35(个)。 方法二:按形状分类。 根据图形的对称性: (1)与△ABF相同的有 5 个; (2)与△ABJ相同的有 5 个; (3)与△AB E 相同的有 5 个; (4)与△AFJ相同的有 5 个; (5)与△AFE相同的有 5 个; (6)与△ACD相同的有 5 个; (7)与△ACI相同的有 5 个。 总共有5×7=35(个)。 二.分步计数 抓住“所有的三角形都至少有一个顶点是五边形的顶点”这个特征。 第一步:以顶点A为代表。 (1)只涉及顶点A的三角形,只有△AFJ这1个;

(2)涉及顶点A和另一个顶点的三角形,有△ABF、△ABJ、△ABG、△ACI、△ADG、△AEI、△AEJ、△AEF共8个; (3)涉及顶点A和另外2个顶点的三角形,有△ABC、△ABD、△ABE、△ACD、△ACE、△ADE共6个。 第二步:推广到5个顶点。 (1)只涉及1个顶点的三角形无重复,有1×5=5(个); (2)涉及2个顶点的三角形排除重复后,实际有8×5÷2=20(个); (3)涉及3个顶点的三角形排除重复后,实际有6×5÷3=10(个)。 总共有5+20+10=35(个)。 可见, 分类计数比较直观,适合各年级学生。其中,方法一具有一般性,适用于所有图形;方法二只适用于特殊图形(对称图形,特别是多向对称图形)。 分步计数比较抽象,只适合分析概括能力较强的高年级学生。关键和难点在于发现图形构成的内在规律。 无论是分类计数还是分步计数,对于小学生来说,要求图形都不能太复杂,否则,极易发生重复或遗漏。设计题目时,必须从学生实际出发,不能要求过高。

计算机图形学--图形几何变换的实现

实验五:图形几何变换的实现 班级08信计2 学号83 姓名王志超分数 一、实验目的和要求: 巩固所学理论知识,加深对二维变换的理解,加深理解利用变换矩阵可由简单图形得到复杂图形。加深对变换矩阵算法的理解。 编制利用旋转变换绘制齿轮的程序。编程实现变换矩阵算法,绘制给出形体的三视图。调试程序及分析运行结果。要求每位学生独立完成该实验,并上传实验报告。 二、实验内容: 在方向、尺寸和形状方面的变换是用改变对象坐标描述的几何变换来完成的。基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、旋转、缩放、反射、错切等。 用直线命令画出一个齿(或六边形的一半)→利用旋转变换或对称变换矩阵实现对其余部分的绘制→调试运行程序→输出图形→分析结果→结束。 编写三维变换算法程序→检查程序的正确性→分段调试程序→输入给出的三维形体各顶点的坐标→执行变换→对算法程序进行必要的调整→更换不同的形体数据继续变换→结束。 三、实验结果分析 . 1该程序实现了图形变换的实现。 2绘制图形,加强对知识的理解。/*二维图形(直线)平移变换*/ #include #include #include main() {int x0,y0,x1,y1,i,j; int a[3][3]; char key; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=0; for(i=0;i<3;i++) a[i][i]=1; int graphdriver=DETECT; int graphmode=0; initgraph(&graphdriver,&graphmode," "); cleardevice(); x0=250;y0=120;x1=350;y1=220; line(x0,y0,x1,y1);

图像二值化算法研究与实现

图像二值化算法研究与实现 摘要:图像二值化是图像预处理中的一项重要技术,在模式识别、光学字符识别、医学成像等方面都有重要应用。论文介绍了图像及数字图像处理技术的一些概念和相关知识;对VC++ 软件的发展和软件在图像处理中的应用做了简要介绍;还介绍了图像二值化算法以及利用VC++软件工具进行算法的实现。论文重点实现了图像分割技术中常用灰度图像二值化算法,如Otsu算法、Bernsen算法,并对这些算法运行的实验结果进行分析与比较。 关键词:图像处理;二值化;VC++; 1.引言 1.1 图像与数字图像 图像就是用各种观测系统观测客观世界获得的且可以直接或间接作用与人眼而产生视觉的实体。视觉是人类从大自然中获取信息的最主要的手段。拒统计,在人类获取的信息中,视觉信息约占60%,听觉信息约占20%,其他方式加起来才约占20%。由此可见,视觉信息对人类非常重要。同时,图像又是人类获取视觉信息的主要途径,是人类能体验的最重要、最丰富、信息量最大的信息源。通常,客观事物在空间上都是三维的(3D)的,但是从客观景物获得的图像却是属于二维(2D)平面的。 数字图像:数字图像是将连续的模拟图像经过离散化处理后得到的计算机能够辨识的点阵图像。在严格意义上讲,数字图像是经过等距离矩形网格采样,对幅度进行等间隔量化的二维函数。因此,数字图像实际上就是被量化的二维采样数组。 1.2 数字图像处理技术内容与发展现状 数字图像处理就是采用一定的算法对数字图像进行处理,以获得人眼视觉或者某种接受系统所需要的图像处理过程。图像处理的基础是数字,主要任务是进行各种算法设计和算法实现。 图像处理技术的发展大致经历了初创期、发展期、普及期和实用化期4个阶段。初创期开始与20世纪60年代,当时的图像采用像素型光栅进行少秒显示,大多采用中、大型机对其处理。在这一时期,由于图像存储成本高、处理设备昂贵,其应用面很窄。进入20世纪70年代的发展期,开始大量采用中、小型机进行处理,图像处理也逐渐改用光栅扫描方式,特别是CT和卫星遥感图像的出现,对图像处理技术的发展起到了很好的推动作用。到了20世纪80年代,图像处理技术进入普及期,此时的微机已经能够担当起图形图像处理的任务。超大规模集成电路(Very Large Scale Integration, VLSI)的出现更使处理速度大大提高,设备造价也进一步降低,极大地促进了图形图像系统的普及和应用。20世纪90年代是图像处理技术的实用化时期,图像处理的信息量巨大,对处理速度的要求极高。 1.3 图像二值化原理及意义 图像二值化是指用灰度变换来研究灰度图像的一种常用方法,即设定某一阈值将灰度

图形方法(graph)

图形方法(graph) 方法演变:盒形图,控制图,直方图和其他频率分布图,多变异图,帕累托图,雷达图,链图和散布图 概述 图使数据具有清晰的视觉显示,便于深刻快速理解数据含义。仅仅是列表或表格中数据的数量是很大的或者无意义的,用图来展示数据能帮助我们更好地解读数据,揭示出隐藏在数据中的信息。 图中的数据是成对的,每对代表了一个观测方面或事件。图通常是画成矩形的(除了饼图和雷达图),成对数据的一半放于水平轴上(x轴),另一半则放于垂直辅(y轴)。图中的点、线、条或符号的位置代表了成对数据的观测值。 这是一个工具门类。有许多不同种类的图都能够被使用,常取决于数据的种类和画图的目的。 适用场合 ·分析数据,尤其是发掘数据中的模式或趋势时; ·演示数据。 图形方法的决策树 图表5. 68是一个决策树,能帮助我们选择最有效的表示数据的图。合适的图取决于数据的种类和所画图的目的。 数据分为分类型( categorical data)和数值型(numerical data),而分类型数据又可分为有两种:一种是表示名字或种类标签的示值型数据(nominal claLa),另一种是有顺序的和数字的序数( ordinal data)。对序数进行运算是没有意义的,分类和等级评定都是序数。数值型的数据可能是整数或连续(示值型)的数,包括分数或小数。 如果用图表示的数据是分类型的,使用决策树的顶部。举例如下:

·一系列的问题(示值型数据)和每个问题的发生次数(数值型数据):排列图。 ·客户服务中有响应性、精确性(示值型数据)和绩效评定等,它们的评定等级从 1~5(序数):雷达图。 ·不同的邮政区码(示值型数据:虽然他们用数字命名,但表示的是位置)和每个 地区的人口数量(数值型的数据):条形图或圆点图。 ·20年的经历(序数):低于1年、1~5年,6~10年,11~20年和调查者的数量 (数值型数据):条形图或圆点图。注意到年龄分组是不同的。 如果数据都是数值型的,则使用表的下面部分。例如: ·数据表示200个顾客中每个人等待服务的时间,想要用图表来表示出等待时 间的总体情况,我们可以采用分钟(数值型的数据)和多少顾客等待那么长时间(数值 型的数据):直方图或多边形图。 ·相同数据。如果想要察看随着时间的变化等待时间是否变化。要画的成对数据为每个顾客进来的时间(数值型数据)和等待时长(数值型数据):控制图。 当我们有数个数据集,并且这些数据集含有数值型数据又含有表示数据类别的数据时,我们不要弄混淆了。尽管出现了表示类别的数据,但是如果要画的是数值型数据,那么采用决策树的下面部分。例如: ·如果我们想要表示过去20年里每个月的道琼斯指数,NASDAQ指数以及S&P指数(分类型数据)的数值。我们可以在线图上表示月份与每个月的数值。每个指数构成一个数据集,有它自己的标记线。 ·想知道班级的大小(数值型数字)是否影响测试成绩(数值型数据)。我们拥有的数据是按照学校所在地区(分类型数据)分组的。我们可以把班级大小和成绩的关系用散布图来表示,不同的地区采用不同的符号标记。 基本步骤 1.收集整理数据,确定是否有分类型数据或只有数值型的数据,确定要研究或显示的内容。 2.确定要使用的图的形式。通过基本步骤的以下部分,也可以通过参考所选图形的步骤和示例部分来作为指导。 3确定图形要显示的数据范围(最小值到最大值)。如果两组数据都显示在y轴上,那么确保两者相同的测量单位。选择每根轴的刻度范围尽可能的大或者比这个范围略大。 4画边界线(也叫刻度线)及刻度,来表明数据范围或数据类型。在刻度的旁边标上数字或标识以及数值型数据的测量单位。 5确定恰当的表示数据的符号和描点,并在符号边写明符号注释。 6需要的话绘制重要数值的参考线,如平均值,用以数据间的比较。如果要突出显示一个重要数字,如发生变化的时刻,就沿着刻度线做一个标记(箭头或说明)。 7填写图的标题和日期、符号注释和说明等。 8分析图的含义,确定是否还需要额外的图表、分析、调查或数据。 注意事项 基本的绘图原则 ·绘图的两个重要原则是: ——使读者易于迅速看懂数据; ——去除冗余。 ·冗余因素包括方格线、过多的标记符号、过多的与标记符号相应的数据、图形内的注释和说明、交叉线、用条柱代替线等。 ·充分发挥图形上的每个标记符号的作用。 符号 ·符号要显著清晰,易于辨认。 ·如果几个符号都在顶部难以区分,就用像Y,X或* 的符号,从中心发出的线的数目代表落入区域的数值个数。或者使用更加复杂的符号,如对数刻度、或描残差、或除去重复的残

相关文档
最新文档