CH04 視窗中元件排排坐 物件導向系統實務.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
第1章 Java语言概述.
《 Java开发环境配置》 主讲人:耿力.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计教程 第一讲 Java概述.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
第12章 JDBC数据库应用程序设计.
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
第11章 Java多媒体技术.
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
類別與物件 Class & Object.
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
Java语言程序设计 马 皓
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
JAVA语言程序设计 第9章 图形用户界面 郑 莉.
问题 Jdbc连接数据库 下载数据库的驱动 Sql server 在微软的网站上可以下载 Sqlserver for jdbc driver
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Ch07 Java Applets 物件導向系統實務.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
SWING 2018/11/23.
程式設計實作.
CH09 套件 物件導向程式設計(II).
記事本 物件導向系統實務.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
記事本 物件導向系統實務.
Java程序设计 第9章 继承和多态.
第10章 Java的线程处理 10.1 线程的基本概念 10.2 线程的属性 10.3 线程组 10.4 多线程程序的开发.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
AWT Event Model.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java基本语法 讲师:复凡.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
龍老師我不會Debug QQ.
JAVA 程式設計與資料結構 第三章 物件的設計.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

CH04 視窗中元件排排坐 物件導向系統實務

複習內部類別—利用內部類別,重作6_4 2019/2/19 import javax.swing.*; import java.awt.*; import java.awt.event.*; class Win7_0 { public static void main(String [] args) { MyJFrame7_0 f = new MyJFrame7_0(); f.setSize(200,300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } class MyJFrame7_0 extends JFrame { JLabel label1; JButton button1; int n = 1; MyJFrame7_0() { super("Win7_0"); this.setLayout(new FlowLayout(FlowLayout.CENTER)); label1 = new JLabel("Hello JAVA World!!"); add(label1); button1 = new JButton("按我"); button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { n++; label1.setText("你按了 " + n + " 次按鈕"); } ); add(button1); 2019/2/19

2019/2/19 利用版面配置來安排元件位置

2019/2/19 版面配置1--FLOWLAYOUT

FLOWLAYOUT版面配置-說明 2019/2/19 FlowLayout水流式版面配置屬於一種簡易的版面配 置方式,JPanel預設使用這種版面配置。 FlowLayout版面配置依序在同一列放置元件,並沒 有任何特殊編排,如果元件超過邊界,就置於下一列。

FLOWLAYOUT版面配置-建構子 2019/2/19 FlowLayout類別的建構子,如下表所示:

範例1:打字機--FLOWLAYOUT 2019/2/19 //設定視窗的版面配置 setLayout(new FlowLayout(FlowLayout.CENTER)); //設定一個標籤 label = new JLabel(text); add(label); //設定7個按鈕 for(int i = 0; i < B.length; i++) { B[i] = new JButton(A[i]); } //為7個按鈕裝上耳朵,實作actionPerformed, 並連線 for(int i = 0; i <B.length; i++) { final int j = i; B[j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { text = text + B[j].getText(); label.setText(text); }); //將按鈕裝到視窗上 { add(B[i]); import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win7_1 { public static void main(String [] args) { MyWin7_1 w = new MyWin7_1("打字機"); w.setSize(200, 300); w.setDefaultCloseOperation(JFrame.EXIT_ON_C LOSE); w.setVisible(true); } class MyWin7_1 extends JFrame { private JLabel label; //存放打字結果 private JButton [] B = new JButton[7]; private String text; MyWin7_1(String title) { super(title); text = ""; String [] A = {"A", "B", "C", "D", "E", "F", " "}; 2019/2/19

2019/2/19 版面配置2--GRIDLAYOUT

GRIDLAYOUT版面配置-說明 2019/2/19 GridLayout格子式版面配置是使用相等尺寸的長方形,以 表格方式分為幾列和幾欄來編排Swing元件,如下圖所示:

GRIDLAYOUT版面配置-建構子 2019/2/19 GridLayout類別的建構子,如下表所示:

GRIDLAYOUT版面配置-相關方法 2019/2/19 GridLayout類別的相關方法,如下表所示:

範例2:打字機--GRIDLAYOUT //設定一個標籤 label = new JLabel(text); add(label); //設定7個按鈕 for(int i = 0; i < B.length; i++) { B[i] = new JButton(A[i]); } //為7個按鈕裝上耳朵,實作actionPerformed, 並連線 for(int i = 0; i <B.length; i++) { final int j = i; B[j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { text = text + B[j].getText(); label.setText(text); }); //將按鈕裝到視窗上 { add(B[i]); import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win7_2 { public static void main(String [] args) { MyWin7_2 w = new MyWin7_2("打字機"); w.setSize(200, 300); w.setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE); w.setVisible(true); } class MyWin7_2 extends JFrame { private JLabel label; //存放打字結果 private JButton [] B = new JButton[7]; private String text; MyWin7_2(String title) { super(title); text = ""; String [] A = {"A", "B", "C", "D", "E", "F", " "}; //設定視窗的版面配置 setLayout(new GridLayout(2,4)); 2019/2/19

2019/2/19 版面配置3--BORDERLAYOUT

BORDERLAYOUT版面配置-說明1 BorderLayout邊界式版面配置是將元件放置在中間 (Center),然後在北(North)、南(South)、 東(East)和西(West)的4個邊界放置元件,如 下圖所示:

BORDERLAYOUT版面配置-說明2 容器類別如果使用BorderLayout版面配置(這是JFrame 的ContentPane預設的版面配置),在JComponent類別 的add()方法就需要第2個參數來指定版面配置方式,如下 所示: c.add(new JButton("北按鈕"), BorderLayout.NORTH); 上述程式碼的第2個參數是元件放置的位置。

BORDERLAYOUT版面配置-建構子與方法

範例3:打字機--BORDERLAYOUT //設定一個標籤 label = new JLabel(text); add(label,BorderLayout.NORTH); //設定7個按鈕 for(int i = 0; i < B.length; i++) { B[i] = new JButton(A[i]); } //為7個按鈕裝上耳朵,實作actionPerformed, 並連線 for(int i = 0; i <B.length; i++) { final int j = i; B[j].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {text = text + B[j].getText(); label.setText(text); }); //將按鈕裝到視窗上 add(B[0], BorderLayout.WEST); add(B[1], BorderLayout.CENTER); add(B[2], BorderLayout.EAST); add(B[3], BorderLayout.SOUTH); import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win7_3 { public static void main(String [] args) { MyWin7_3 w = new MyWin7_3("打字機"); w.setSize(200, 300); w.setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE); w.setVisible(true); } class MyWin7_3 extends JFrame { private JLabel label; //存放打字結果 private JButton [] B = new JButton[7]; private String text; MyWin7_3(String title) { super(title); text = ""; String [] A = {"A", "B", "C", "D", "E", "F", " "}; //設定視窗的版面配置 setLayout(new BorderLayout()); 2019/2/19

討論: 如果有很多的元件要放在視窗上,在版面配置上,是 不是只能亂亂放?或是中規中矩的擺呢? 2019/2/19 如果有很多的元件要放在視窗上,在版面配置上,是 不是只能亂亂放?或是中規中矩的擺呢? 如果有些元件是彼此相關的,卻要跟其他元件一起擺 放,是不是看不出它們的整體性?

SWING應用程式架構 Swing應用程式的架構像是在一個大盒子中放入 多個小盒子,首先將Swing套件的各種GUI元件 JButton和JLabel新增到中間層容器元件。例如: JPanel,然後將JPanel新增到最上層容器類別 JFrame,JFrame是一種擁有標題列的視窗元件, 如下圖所示: 2019/2/19

SWING的最上層容器類別-類別架構 在Java的Swing應用程式需要使用一個最上層容 器類別作為容器類別架構的根類別,Swing的 GUI元件需要新增至「容器」(Container)類別 架構,才能讓GUI元件在螢幕上顯示,如下圖所 示: 2019/2/19

SWING的最上層容器類別-說明 Swing應用程式至少需要擁有一個JFrame容器類 別架構,也就是一個擁有標題列的主視窗。 應用程式對話方塊可以建立以JDialog為最上層類 別的容器類別架構。例如:Java應用程式擁有1個 主視窗和2個對話方塊,也就是建立1個以JFrame 和2個以JDialog為根類別的容器類別架構。 在Java Applet也可以使用Swing元件,這是建立 以JApplet為根類別的容器類別架構,如此即可在 Java Applet顯示Swing的GUI元件。 2019/2/19

JFRAME最上層容器類別-類別架構 JFrame類別的物件是一個擁有框線、標題列和圖 示按鈕的Windows視窗,這個視窗擁有隱藏的功 能表列(MenuBar)和ContentPane元件, JFrame類別的繼承架構,如下圖所示: 2019/2/19

JFRAME最上層容器類別-建構子 JFrame類別的建構子,如下表所示: 2019/2/19 2019/2/19 23

JFRAME最上層容器類別- CONTENTPANE相關方法 2019/2/19 2019/2/19 24

JFRAME最上層容器類別- COMPONENT相關方法 2019/2/19

SWING的中間層容器類別 Swing套件的中間層容器類別的目的是將Swing元件 群組化,以便使用”版面配置管理員”來編排新增的 GUI元件,Swing套件提供相當多種中間層容器類別。 例如:JPanel、JScrollPane、JSplitPane、JTabbedPane和JInternalFrame等。

JPANEL類別-說明與建構子 JPanel類別屬於一般用途的中間層容器,預設為透 明、沒有背景色彩,這是一種看不見的中間層容器類 別,預設使用FlowLayout版面配置,其使用方式類 似ContentPane類別,JPanel類別的建構子,如下 表所示:

JPANEL類別-方法 JPanel關於版面配置的相關方法,如下表所示:

2019/2/19 //改成Content和JPanel import java.awt.*; import java.awt.event.*; import javax.swing.*; class Win7_4 { public static void main(String [] args) { MyWin7_4 w = new MyWin7_4("打字機"); w.setSize(650, 300); w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); w.setVisible(true); } class MyWin7_4 extends JFrame { private Container c; private JPanel labelArea; //存放label private JPanel specialCharArea; //存放特殊字元區 private JPanel alphaArea; //存放字母區 private JPanel numericArea; //存放數字區 private JPanel spaceArea; //存放空白鍵 private JLabel label; //存放打字結果 private JButton [] B = new JButton[49]; private String text; 2019/2/19

c.setLayout(new BorderLayout()); MyWin7_4(String title) { super(title); //定義初始值 text = ""; String [][] A = {{"!", "@", "#", "$", "%", "^", "&", "*", "(", ")","~","+"}, {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}, {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}, {" "}}; c = getContentPane(); //設定視窗的版面配置 c.setLayout(new BorderLayout()); //設定一個標籤 label = new JLabel(text); 2019/2/19

for(int i = 0; i < A.length; i++) 2019/2/19 //設定49個按鈕 int k = 0; for(int i = 0; i < A.length; i++) { for(int j =0; j < A[i].length; j++) { B[k] = new JButton(A[i][j]); //為每個按鈕裝上耳朵,實作actionPerformed, 並連線 final int temp = k; B[k].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { text = text + B[temp].getText(); label.setText(text); } }); k++;

labelArea = new JPanel(new FlowLayout()); labelArea.add(label); //將特殊字元裝到specialCharArea //specialCharArea設定為GridLayout specialCharArea = new JPanel(new GridLayout(3,4)); //specialCharArea = new JPanel(); for(int i = 0; i < 12; i++) { specialCharArea.add(B[i]); } 2019/2/19

//alphaArea設定為FlowLayout ?????? //將數字字元裝到numericArea //numericArea設定為GridLayout //將空白字元裝到spaceArea //spaceArea設定為FlowLayout //將JPanel全加到container上 c.add(labelArea, BorderLayout.NORTH); c.add(specialCharArea, BorderLayout.WEST); c.add(alphaArea, BorderLayout.CENTER); c.add(numericArea, BorderLayout.EAST); c.add(spaceArea, BorderLayout.SOUTH); } 2019/2/19