Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java语言程序设计 第六部分 Java图形用户界面.

Similar presentations


Presentation on theme: "Java语言程序设计 第六部分 Java图形用户界面."— Presentation transcript:

1 Java语言程序设计 第六部分 Java图形用户界面

2 Java图形用户界面 第一讲 图形用户界面概述

3 图形用户界面 图形用户界面(Graphical User Interface,GUI) ,是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种屏幕元素。为应用程序提供一个友好的图形化的交互界面。 图形用户界面由组件组成。组件是可见的对象。用户可以通过鼠标或键盘对他们进行操作。 Java在java.awt和javax.swing包中提供了构成java图形用户的组件类事件类。

4 图形用户界面 跨平台的图形用户界面 抽象窗口工具包AWT Swing
abstract window toolkit,提供了图形用户界面和图形在Java兼容的操作系统中使用本地窗口系统进行显示。 它包含了许多标准的GUI组件,如按钮、菜单、列表、文本区等,同时它还包括窗口、面板等容器。 Swing Swing是建立在AWT基础之上的,它用来代替AWT中的重量组件,而不是用来替代AWT本身。 它利用了AWT的底层组件,包括图形、颜色、字体、工具包和布局管理器等。 它使用AWT最好的部分来建立一个新的轻量组件集,同时还提供了大量有助于开发图形用户界面的附加组件。

5 java.awt包的子包 java.awt java.awt.color java.awt.event java.awt.font
包含用于创建用户界面和绘制图形图像的所有类 java.awt.color 提供用于颜色空间的类 java.awt.event 提供处理由 AWT 组件所激发的各类事件的接口和类 java.awt.font 提供与字体相关的类和接口 java.awt.image 提供创建和修改图像的各种类

6

7 创建图形用户界面 组件(Component) 容器(Container)
是构成图形用户界面的基本成分和核心元素。 组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。 它有众多的子类,如Button(按钮)、Checkbox(复选框)等等。这些类每个都能完成一定的控制功能 容器(Container) 是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器,在其可视区内显示这些组件。 想要在屏幕上显示某个组件,则必须先将该组件添加到某个容器中,这些组件可随着该容器一起显示在屏幕上。

8 创建图形用户界面 组件大小 组件定位 布局管理器 组件的宽度和高度 相对于容器,组件左上角的坐标
每个容器都有一个布局管理器,用于保证图形用户界面具有良好的平台无关性。 容器中的布局管理器负责管理各个组件的大小和位置,因此,用户无法在这种情况下设置这些组件的有关位置信息的属性。 不使用布局管理器,自己定义组件的大小,将导致程序的系统相关。

9 Component public abstract class Component extends Object
implements ImageObserver, MenuContainer, Serializable { public int getWidth() //宽度 public int getHeight() //高度 public void setSize(int width, int height) //宽度和高度 public int getX() //位置的X坐标值 public int getY() //位置的Y坐标值 public void setLocation(int x, int y) //坐标位置,x、y指定组件左上角相对于容器的坐标位置 public void setBounds(int x, int y, int width, int height) //坐标位置和宽度、高度 public Color getBackground() //获得组件的背景颜色 public void setBackground(Color c) //设置组件的背景颜色 public Font getFont() //获得组件字体 public void setFont(Font f) //设置组件字体 public void setVisible(boolean b) //设置组件是否显示 }

10 javax.swing包 Swing是构筑在AWT上层的一组GUI组件的集合,为保证可移植性,它完全用Java语言编写,与AWT相比,提供了更完整的组件,引入了许多新的特性和能力。 Swing提供更多的组件库,如:JButton,JLabel等。这些增强的组件在Swing中的名称通常都是在AWT组件名前增加了一个“J”字母,如AWT中的Button在Swing中是JButton。 大部分的Swing组件是用Java码直接在画布(canvas)上画出来的。Swing组件较不依赖目标平台,且使用较少的本地资源,被称之为轻量级组件,而AWT组件就被称为重量级组件。

11

12 Java图形用户界面 第二讲 简单AWT组件和容器

13 AWT中的容器 基本组件 名称 功能 Window类 Frame类 Dialog类 Panel类 窗口类 框架类 对话框类 面板类
Frame类的实例可以有一个菜单条,否则它与Window类的对象非常相似 Dialog类的对象只有在一个相关的Frame类对象存在时才存在 Panel类的是实例提供一个可以加入组件的容器,是容器组件的通用容器

14 AWT中的基本控件 基本组件 名称 功能 Button Label TextField TextArea Checkbox
CheckboxGroup Choice List Menu Canvas Scrollbar 按钮 标签 文本框 多行文本框 复选框 单选框 下拉式列表 列表 菜单 画布 滚动条 完成一个命令 显示单行文字 显示或输入单行文字 显示或输入多行文字 选择一项功能 在一组功能中选择一个 创建下拉式选择菜单 创建选择列表 创建菜单 进行绘画 在指定范围内选值、浏览

15 标签 标签(Label)是一种只能用来显示单行文本的组件。 标签类有三个构造方法:
标签在容器中的对齐方式有三种:左对齐、居中和右对齐,用LABEL.LEFT、LABEL.CENTER、LABEL.RIGHT三个静态常量表示,在程序中可以设置其对齐方式。 标签类有三个构造方法: Label( )        生成一个空标签 Label(String text)    生成一个带有指定文本的标签 Label(String text, int alignment) 生成一个带有指定文本和在容器中的对齐方式的标签

16 按钮 按钮在屏幕上通常表现为一块有边界的矩形区域,上面有文字标记来说明该按钮的功能, 按钮由Button类来定义,其构造方法有二个:
Button(String label) 生成一个带标记label的按钮 Button类中有一系列对按钮进行管理的方法,可以进行设置和获取按钮的状态,处理按钮产生的事件等。常用的方法有: setLabel(String label) 设置按钮标记 getLabel( ) 获取按钮标记

17 文本框 文本框(TextField)和多行文本框(TextArea)是用来显示和输入文本的组件,它们都是TextComponent的子类。
TextField(Strint text) 创建一个带有初始文本的文本框 TextField(int Columns) 创建一个指定列数的文本框 TextField(String text,int colulmns) 创建一个指定列数和带有初始文本的文本框

18 多行文本框 多行文本框由TextArea 类来创建,其构造方法有: TextArea() 创建一个0行长, 0列宽的空多行文本框
TextArea(int,int) 创建一个具有给定行数,给定列数的空多行文本框 TextArea(String) 创建一个具有给定字符串的多行文本框 TextArea(String,int,int) 创建一个具有给定字符串、给定行数、列数的多行文本框

19 常用容器 容器有两种:窗口(window)和面板(panel) 窗口类和面板类都是容器类Container的子类。
窗口可以独立存在,可被移动,可被最大化和最小化,有标题栏、边框、可添加菜单栏。 面板不能独立运行,必须包含在另一个容器里。面板没有标题,没有边框,不可添加菜单栏。 一个窗口可以包含多个面板,一个面板可以包含另一个面板,但是面板不能包含窗口。 窗口类和面板类都是容器类Container的子类。 容器中的布局管理器负责各个组件的大小和位置,如果试图使用Java语言提供的setLocation()、setSize()、setBounds()等方法,则都会被布局管理器覆盖。 如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为setLayout(null)。

20 框架 Frame Window类的子类 是一种带标题栏并可以改变大小的窗口 setSize( ) setVisible( )
setBackground( )

21 public class MyFrame extends Frame {
public static void main(String args[]) { // 构造方法 MyFrame fr = new MyFrame("Hello Out There!"); // 设置Frame的大小,缺省为(0,0) fr.setSize(200, 200); // 设置Frame的背景,缺省为红色 fr.setBackground(Color.red); // 设置Frame为可见,缺省为不可见 fr.setVisible(true); } public MyFrame(String str) { super(str); // 调用父类的构造方法

22 对话框 对话框是一种可移动的窗口,比框架简单,没有那么多的控制元素,如最小化、状态栏。 对话框分为模态或非模态:
当一个模态的对话框打开时,不允许访问应用程序中的其他窗口,直到该对话框关闭。 当一个非模态的对话框打开时,用户仍然可以访问其他窗口。

23 对话框 public class Dialog extends Window {
public Dialog(Frame owner) //owner指明拥有对话框的框架 public Dialog(Frame owner, String title) //title是对话框的窗口标题 public Dialog(Frame owner, boolean modal) //modal指明该对话框是否为模式窗口 public Dialog(Frame owner, String title, boolean modal) public void setVisible(boolean b) }

24 面板 面板不能独立运行,必须包含在另一个容器里。面板没有标题,没有边框,不可添加菜单栏。
一个窗口可以包含多个面板,一个面板可以包含另一个面板,但是面板不能包含窗口。 Panel 放到其他容器中 add添加到其他容器中 可作为其他控件的容器 add添加控件

25 import java.awt.*; public class FrameWithPanel extends Frame { public FrameWithPanel(String str){ super(str); } public static void main(String[] args){ FrameWithPanel fr= new FrameWithPanel("Frame with Panel"); Panel pan=new Panel(); fr.setSize(200,200); fr.setBackground(Color.blue); fr.setLayout(null); pan.setSize(100,100); pan.setBackground(Color.yellow); fr.add(pan); fr.setVisible(true);

26 Java图形用户界面 第三讲 布局管理器

27 布局 容器的布局 Java程序布局的特点 布局管理器 窗口大小的不确定性 控件的大小和位置可以随窗体大小的调整而调整
当窗口移动或调整大小后组件如何变化等功能,授权给对应的容器布局管理器来管理。 不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。

28 常用的布局管理器 FlowLayout BorderLayout GridLayout CardLayout GridBagLayout

29 布局管理器 FlowLayout FlowLayout布局管理器是Panel和Applet的缺省布局管理器。
这种布局方式是将组件一排一排地依次放置。 当容器被重新设置大小后,则布局也将随之发生改变。各个组件大小不变,而其相对位置会发生变化。

30 import java.awt.*; public class MyButtons { public static void main(String[] args) Frame f=new Frame(); f.setLayout(new FlowLayout()); Button button1=new Button("OK"); Button button2=new Button("OPEN"); Button button3=new Button("CLOSE"); f.add(button1); f.add(button2); f.add(button3); f.setSize(300,100); f.setVisible(true); }

31 布局管理器 FlowLayout 容器中各个组件在FlowLayout布局管理器中,缺省为居中放置,但也可设置为左对齐或右对齐。如果希望增加组件之间的间距,可以在构造方法中进行相应设置。如使用Component类的setLayout()方法实现FlowLayout布局管理器。 例如 setLayout(new FlowLayout (FlowLayout.RIGHT,20,40)); 右对齐,组件之间水平间距20个像素,竖直间距40个像素 setLayout(new FlowLayout (FlowLayout.LEFT)); 左对齐,水平和竖直间距为缺省值:5 setLayout(new FlowLayout()); 使用缺省居中对齐方式,水平和竖直间距为缺省值:5

32 布局管理器 BorderLayout BorderLayout 布局管理器是Window ,Frame和Dialog的缺省布局管理器。
BorderLayout布局管理器包括 5 个区域:North,South,East,West和Center,其方位的确定符合“上北下南左西右东”的规则。  使用BorderLayout布局管理器的容器被拉伸后,即大小改变了,但各个组件的相对位置不变,其中间部分组件的尺寸会发生变化,四周组件宽度固定不变。

33 import java.awt.*; public class ButtonDir { public static void main(String[] args){ Frame f=new FrameWithPanel("BorderLayout"); f.setLayout(new BorderLayout()); f.add("North",new Button("North")); f.add("South",new Button("South")); f.add("East",new Button("East")); f.add("West",new Button("West")); f.add("Center",new Button("Center")); f.setSize(200,200); f.setVisible(true); }

34 布局管理器 BorderLayout 在容器中,使用双参数的add()方法添加组件。但每个区域只能添加一个组件,如果添加多个组件,则只能有一个显示。 如果想要在某一区域添加多个组件,则必须先放置一个容器,再将多个组件置于该容器中即可。 add()方法的第一个参数是被添加到容器中的组件,第二个参数是添加的方位,如果没有指定添加位置,则表示为默认的“Center"方位,这两个参数的位置是可以互换的。

35 布局管理器 GridLayout GridLayout 布局管理器可以使容器中的各个组件呈网格状布局。当改变容器大小后,其中的组件相对位置不变,但大小改变。 容器中各个组件同高度、同宽度。各个组件按照从上到下从左到右的顺序依次排列。 例如:new GridLayout(3,2),表示生成一个3行2列的GridLayout布局管理器对象。

36 import java.awt.*; public class ButtonGrid { public static void main(String[] args) Frame f=new Frame("GridLayout"); f.setLayout(new GridLayout(3,2)); f.add(new Button("1")); f.add(new Button("2")); f.add(new Button("3")); f.add(new Button("4")); f.add(new Button("5")); f.add(new Button("6")); f.setSize(200,200); f.setVisible(true); }

37 布局管理器 CardLayout CardLayout 布局管理器能够实现两个以至更多的成员共享同一显示空间。
在一张卡片中只能显示一个组件,因此,可以使用容器嵌套的方法显示多个组件。

38 import java.awt.*; import java.awt.event.*; public class ThreePages implements MouseListener { CardLayout layout=new CardLayout(); Frame f=new Frame("CardLayout"); Button page1Button; Label page2Label; TextArea page3Text; Button page3Top,page3Bottom; public static void main(String[] args) new ThreePages().go(); } public void go(){ f.setLayout(layout); f.add(page1Button=new Button("Button page"),"page1Button"); page1Button.addMouseListener(this); f.add(page2Label=new Label("Label page"),"page2Label"); page2Label.addMouseListener(this);

39 Panel panel=new Panel();
panel.setLayout(new BorderLayout()); panel.add(page3Text=new TextArea("Composite page")); page3Text.addMouseListener(this); panel.add(page3Top=new Button("Top button"),"North"); page3Top.addMouseListener(this); panel.add(page3Bottom=new Button("Buttom button"),"South"); page3Bottom.addMouseListener(this); f.add(panel,"panel"); f.setSize(200,200); f.setVisible(true); } public void mouseClicked(MouseEvent e) { layout.next(f); public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){}

40 布局管理器 无布局管理器 在程序中还可以使用setLayout(null)方法设置某个容器的布局管理器为空,也就是无布局管理器。
用户必须使用Java语言提供的setLocation() ,setSize(),setBounds()等方法,为容器中的每个组件设置大小和显示位置,否则将无法看到这些组件。 如果用户不设置布局管理器,那么这个程序的显示效果将会与平台相关。

41 容器 框架 面板 创建面板和构造复杂布局 BorderLayout FlowLayout 容器的嵌套 复杂的布局管理器
GridBagLayout布局管理器可以提供最复杂的容器布局

42 Java图形用户界面 第四讲 事件处理

43 事件模型 事件 对于一个用户界面而言,最重要的是实现和用户的交互,接受用户的输入,并执行相应的动作。这都是通过AWT的事件处理机制实现的。 当用户在界面上执行了某个动作,如按下鼠标,按下键盘按键等, 都将会导致事件的发生。

44 import java.awt.*; import java.awt.event.*; class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("Action occurred"); } public class TestButton public static void main(String[] args) { Frame f=new Frame("Test"); Button b=new Button("Press Me!"); b.addActionListener(new ButtonHandler()); f.add("Center",b); f.pack(); f.setVisible(true);

45 事件处理模型 层次模型 委托模型 控件处理所有事件 事件源对象 产生事件的组件对象,如按钮。 事件对象 它描述了发生什么事情。 事件监听器
调用事件处理方法的对象。

46 事件处理模型 这种委托事件处理模型具有相当的灵活性和很强的事件处理能力,使得任何数量的事件监听器能监听来自任意多个事件源对象的各个种类的事件。例如,一个程序可以为每个事件源设置一个监听器,也可以用一个监听器处理所有事件源产生的所有事件,甚至可以为一个事件源产生的一种事件设置多个监听器,等等。

47 public class TestButton { public static void main(String args[]) {
Frame f = new Frame("Test"); Button b = new Button("Press Me!"); b.addActionListener(new ButtonHandler()); f.setLayout(new FlowLayout()); f.add(b); f.setSize(200, 100); f.setVisible(true); } class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("Action occurred"); Button是事件源 事件 事件处理者 例如,如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收由java运行时系统传递过来的事件对象actionE并进行相应的处理。 由于同一个事件源上可能发生多种事件,因此java采取了授权处理机制(Delegation Model),事件源可以把在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。比如在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以授权给事件处理者一来处理鼠标事件,同时授权给事件处理者二来处理键盘事件。有时也将事件处理者称为监听器,主要原因也在于监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。例如类ButtonHandler之所以能够处理ActionEvent事件,原因在于它实现了与ActionEvent事件对应的接口ActionListener。每个事件类都有一个与之相对应的接口。

48 事件类和事件

49 事件类和事件 ComponentEvent(组件事件) 组件尺寸的变化、移动
ContainerEvent(容器事件) 容器内组件的增加、删除 WindowEvent(窗口事件) 关闭和打开窗口 FocusEvent(焦点事件) 焦点的获得和释放 KeyEvent(键盘事件) 按键的按下,松开 MouseEvent(鼠标事件) 单击鼠标,拖动鼠标 ActionEvent(动作事件) 按钮按下,TextField中按Enter键 ItemEvent(项目事件) 选中项目或放弃选中项目 TextEvent(文本事件) 文本内容改变。

50 事件处理 对于某种类型的事件XXXEvent, 要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener。 例如,动作事件类取名为ActionEvent,则相应的动作事件监听器接口名字为ActionListener。 事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener ) 方法来注册监听器。 b.addActionListener(new ButtonHandler()); 不同的监听器接口中定义了不同的处理方法。 例如,ActionListener接口中只定义了一个处理方法ActionPerformed(ActionEvent)。

51 事件类、事件监听器接口和方法 事件类 事件监听器接口 接口中定义的方法 ActionEvent ActionListener
actionPerformed(ActionEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) MouseEvent MouseMotionListener mouseDragged(MouseEvent) mouseMoved(MouseEvent) MouseListener mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent) KeyEvent KeyListener keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)

52 事件类、事件监听器接口和方法 事件类 事件监听器接口 接口中定义的方法 FocusEvent FocusListener
focusGained(FocusEvent) focusLost(FocusEvent) WindowEvent WindowListener windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent) windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent) TextEvent TextListener textValueChanged(TextEvent)

53 import java.awt.*; import java.awt.event.*; public class TwoListen implements MouseMotionListener, MouseListener, WindowListener{ private Frame f, TextField tf; public static void main(String[] args) { TwoListen two=new TwoListen(); two.go(); } public void go() { f=new Frame("Two listeners example"); f.add(new Label("Click the mouse"),"North"); tf=new TextField(30); f.add(tf,"South"); f.addMouseMotionListener(this); f.addMouseListener(this); f.addWindowListener(this); f.setSize(300,200); f.setVisible(true); public void mouseDragged(MouseEvent e){ String s="Mouse dragging:X=“ +e.getX()+"Y"+e.getY(); tf.setText(s); public void mouseMoved(MouseEvent e){} public void mouseClicked(MouseEvent e){}

54 public void mouseEntered(MouseEvent e)
{ String s="The mouse entered"; tf.setText(s); } public void mouseExited(MouseEvent e) String s="The mouse has left the building"; public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void windowClosing(WindowEvent e) System.exit(1); public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){}

55 事件适配器 由于接口都是抽象的,因此,当通过实现Listener接口完成事件处理时,要同时实现该接口中的所有方法。当某个类实现MouseListener接口时,即使只使用其中的一个方法。它也必须重写该接口中的5个方法,这将给编程人员带来多余的工作量,既影响编程效率,也由于程序变长而影响了程序的可读性。 在java语言中,11个监听器中有7个监听器有多于1个的方法。为了方便起见,java语言为这7个Listener接口都提供了Adapter(适配器)类。当我们想要使用事件处理机制时,只需让该类继承事件所对应的Adapter类,仅仅重写需要的方法就可以了,这样无关的就不用实现了。

56 内部类

57 匿名类

58 Java图形用户界面 第五讲 swing控件

59 swing控件 public class LoginJFrame extends JFrame{ public LoginJFrame(){
super("用户登录"); this.setSize(400,100); this.setBackground(java.awt.Color.lightGray); this.setLocation(300,240); this.setDefaultCloseOperation(EXIT_ON_CLOSE); Container jframe_content = this.getContentPane(); jframe_content.setLayout(new java.awt.FlowLayout()); jframe_content.add(new JLabel("userid")); jframe_content.add(new JTextField("user1",10)); jframe_content.add(new JLabel("password")); jframe_content.add(new JPasswordField(10)); jframe_content.add(new JButton("Ok")); jframe_content.add(new JButton("Cancel")); this.setVisible(true); }

60 swing控件 class UserJFrame JTextArea JRadioButton JComboBox
ButtonGroup bgroup = new ButtonGroup(); radiob_male = new JRadioButton("男",true); bgroup.add(radiob_male); JComboBox combox_province.getSelectedIndex(); combox_city.removeAllItems(); combox_city.addItem(this.cities[i][j]);

61 swing控件 class EditorJFrame JCheckBox JToolBar JTextArea
new JCheckBox("粗体"); JToolBar toolbar.add(checkb_bold); JTextArea text.cut(); text.copy(); text.paste(); text.setForeground(color); text.setFont(…)

62 swing控件 class EditorJFrame JMenuBar JPopupMenu
JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem JPopupMenu JOptionPane.showMessageDialog

63 swing控件 LoanJFrame.class

64 swing控件 LoanJFrame.class Jspinner Jtable JScrollPane
spin_year.setValue(year); Jtable table=new JTable(datas, titles); JScrollPane String titles[] Object datas[][] this.getContentPane().add(new JScrollPane(table));

65 swing控件

66 swing控件 RoseJFrame.java Canvas
paint(Graphics g) repaint(); update(Graphics g) Graphics g.setColor(color); g.drawLine(x0,0,x0,y0*2); g.fillOval(x0+x,y0+y,1,1); JColorChooser.showDialog(this,"选择颜色",Color.blue);

67 swing控件 使用鼠标随意画线 PaintJFrame.java 使用鼠标画直线 PaintLineJFrame.java

68 Java图形用户界面 第六讲 开发工具

69 eclipse JDK IDE

70 欢迎界面

71 创建新项目 File New Project 选择 Java Project

72 输入 Project Name 选择 JRE

73 File New Class 填写 类名 选择 main方法

74

75 错误提示信息

76 导入类和项目 File Import

77 导入类和项目 选择目录 选择文件 选择包

78 NetBeans

79 NetBeans

80 新建项目

81 新建文件

82 对图形用户界面的支持

83 对图形用户界面的支持

84 编译和运行文件


Download ppt "Java语言程序设计 第六部分 Java图形用户界面."

Similar presentations


Ads by Google