視窗程式設計 8.按鈕、核取方塊與按鈕群組 Chih Hung Wang Reference:

Slides:



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

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第一單元 建立java 程式.
圖形程式設計簡介.
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
第9章 图形用户界面(GUI)设计.
視窗程式設計 3. Java 視窗入門 Chih Hung Wang Reference:
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
程式設計實作.
視窗程式設計 5.文字欄位相關設計 Chih Hung Wang Reference:
JAVA语言程序设计 第9章 图形用户界面 郑 莉.
问题 Jdbc连接数据库 下载数据库的驱动 Sql server 在微软的网站上可以下载 Sqlserver for jdbc driver
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
JAVA vs. SQL Server 建國科技大學 資管系 饒瑞佶 2013/4 V1.
电子商务技术基础 张宝明.
程式設計實作.
視窗程式設計 10. 組合方塊與對話盒 Chih Hung Wang Reference:
Java程序设计 第15章 创建用户界面.
記事本 物件導向系統實務.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
記事本 物件導向系統實務.
安裝JDK 安裝Eclipse Eclipse 中文化
AWT Event Model.
系統設定 IE8相容性檢視
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
Java 程式設計 講師:FrankLin.
網頁切換移轉 JS vs. ASP.NET.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
視窗程式設計 6. 標籤、顏色、字型與圖示 Chih Hung Wang Reference:
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
事件處理.
第一單元 建立java 程式.
標籤、按鈕、工具列、狀態列 (Labels, Buttons, Tool Strips, and Status Strips)
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十章 基于Swing的图形用户界面设计.
Multithread 多執行緒 以GUI為例了解物件以及Event
第 19 章 XML記憶體執行模式.
PowerPoint 2019/4/9.
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
表格(HTML – FORM).
第 21 章 Access與XML.
Visual C++ Windows Programming
期末考.
GridView.
GridView操作 (II).
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
PowerPoint 操作介紹 106 計算機概論
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
陣列與結構.
Dreamweaver 進階網頁製作 B 許天彰.
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
JAVA 程式設計與資料結構 第三章 物件的設計.
判斷(選擇性敘述) if if else else if 條件運算子.
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

視窗程式設計 8.按鈕、核取方塊與按鈕群組 Chih Hung Wang Reference: 1. Java 2 視窗程式設計,文魁出版社,位元文化編著 (2008) (教科書) 2. 深入研究Java Swing,上奇資訊股份有限公司,黃嘉輝著 (2011) 3. Java SE 6.0視窗程式設計之道,碁峰出版社,黃嘉輝著 (2008) 4. Java 初學指引,博碩文化,陳錦輝著 (2010) 視窗程式設計 8.按鈕、核取方塊與按鈕群組 Chih Hung Wang

Swing的按鈕元件 以下為Swing提供的按鈕元件: JButton(指令按鈕) JToggleButton(切換按鈕) JCheckBox(核取方塊) JRadioButton(選擇鈕) JMenuItem(功能表選項)以其子類別 AbstractButton類別 建立上述按鈕元件的類別均繼承於AbstractButton類別,此類別可以引發以下語意事件: ActionEvent事件 ChangeEvent事件 ItemEvent事件 以下為AbstractButton類別繼承架構:

下表將介紹AbstractButton類別的常用方法:

ButtonModel介面 而對於按鈕元件狀態的維護,則由實作ButtonModel介面的Model物件負責,除了JToggleButton類別外,其他按鈕元件類別均預設使用DefaultButtonModel類別,DefaultButtonModel類別的繼承架構如下所示: JToggleButton類別及其子類別則使用衍生DefaultButtonModel類別的JToggleButton.ToggleButtonModel類別。ToggleButtonModel類別的繼承架構如下: 以下為DefaultButtonModel類別的屬性,用於控制按鈕元件的狀態,您可呼叫isXXX()方法與setXXX()方法取得或設定這些屬性。 selected:每按一下即改變狀態。 pressed:當按鈕被滑鼠按下時,傳回true。 rollover:當滑鼠移至按鈕上時,傳回true。 armed:當按下滑鼠,但在按鈕範圍外放開滑鼠,將不引發事件。 enabled:設定為true表按鈕可被使用,若設定為false則按鈕將失效無法使用。

指令按鈕 指令按鈕的基本運用 指令按鈕用於執行動作,常用於確認、取消對話盒輸入的資料,如下圖所示。 指令按鈕的建立將運用JButton元件。當按下指令按鈕時,將觸發ActionEvent事件,因此,指令按鈕欲執行的動作,將藉由回應ActionEvent事件的機會執行。本節將運用兩個範例介紹如何運用JButton類別建立指令按鈕元件,圖為範例7-1的執行結果。

Ex7-1 package mid; import javax.swing.*; import java.awt.*; import java.awt.event.*; //引用處理事件的event套件 public class Mid extends JFrame{ JButton enable = new JButton("使圖示按鈕有效"); JButton disable = new JButton(); JButton iconBtn = new JButton(new ImageIcon( Mid.class.getResource("images/bitc.gif"),"位元文化LOGO")); //宣告指令按鈕物件 //定義並宣告監聽器物件 ActionListener al = new ActionListener(){ public void actionPerformed(ActionEvent e){ //取得動作命令字串, 並判斷觸發事件的按鈕 if(e.getActionCommand().equals("enable")){ enable.setEnabled(false); //依照需求設定按鈕是否有效 disable.setEnabled(true); iconBtn.setEnabled(true); } else{ enable.setEnabled(true); disable.setEnabled(false); iconBtn.setEnabled(false); };

Mid(){ disable.setText("使圖示按鈕無效"); //設定按鈕顯示的文字 enable.setActionCommand("enable"); //設定按鈕的動作命令字串 disable.setActionCommand("disable"); disable.setEnabled(false); //將按鈕的起始狀態設定為無效 iconBtn.setEnabled(false); enable.addActionListener(al); //註冊監聽器 disable.addActionListener(al); Container cp = getContentPane(); //取得內容面版 cp.setLayout(new FlowLayout()); //設定以FlowLayout配置版面 cp.add(enable); //將元件加入面版 cp.add(iconBtn); cp.add(disable); //設定視窗關閉動作、視窗大小, 並顯示視窗 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600, 150); setVisible(true); } public static void main(String args[]) { new Mid(); //宣告視窗框架物件

ActionEvent事件的回應 以下將說明JButton類別建構子的規格: public JButton() public JButton(Icon icon) public JButton(String text) public JButton(Action a) public JButton(String text, Icon icon) 下表將介紹定義於JButton類別的常用方法。 ActionEvent事件的回應 以下敘述將以匿名類別的方式,宣告回應按鈕ActionEvent事件的監聽器物件。監聽器物件回應ActionEvent事件時,將呼叫ActionEvent物件的getSource()方法取得觸發事件的元件,再呼叫getActionCommand ()方法取得觸發事件之元件的動作命令字串,並判斷動作命令字串是否為enable(第18行),是則將enable按鈕設定為無效,disabel按鈕與iconBtn按鈕設定為有效(第18~22行)。否則設定enable按鈕設定為有效,disable按鈕與iconBtn按鈕設定為無效(第23~27行)。

以指令按鈕控制CardLayout 設定助憶符號與預設按鈕 本節的範例7-3修改自範例7-2,將介紹如何設定指令按鈕的助憶符號,以及視窗的預設按鈕,執行結果如下:

設定指令按鈕不同狀態使用不同圖示 在不同狀態下,按鈕元件可使用不同圖示,以下將列出各種不同狀態,與設定圖示的方法:

Ex7-2 package mid; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; //引用處理事件的event套件 public class Mid extends JFrame { JLabel[] lbImage = { //宣告顯示圖片的標籤物件 new JLabel( new ImageIcon( Mid.class.getResource("images/A4023.jpg"), "Access 2003 徹底研究")), Mid.class.getResource("images/A4033.jpg"), "Access 2003 程式設計")), Mid.class.getResource("images/A4043.jpg"), "Access 2003 網路應用")), Mid.class.getResource("images/W4075.jpg"), "ASP動態網頁入門實務")), Mid.class.getResource("images/W3135.jpg"), "JSP動態網頁入門實務")) }; JButton btnPre = new JButton("上一頁"), //宣告控制CardLayout面版顯示內容的按鈕 btnNext = new JButton("下一頁"), btnFirst = new JButton("第一頁"), btnLast = new JButton("最後一頁"), btnName = new JButton("ASP動態網頁入門實務");

ActionListener alBtn = new ActionListener(){ //定義監聽ActionEvent事件的監聽器類別 public void actionPerformed(ActionEvent e){ String strCommand = e.getActionCommand(); //取得動作命令字串 if(e.getActionCommand().equals("上一頁")) cl.previous(jpImage); //移至上一張卡片 else if(e.getActionCommand().equals("下一頁")) cl.next(jpImage); //移至下一張卡片 else if(e.getActionCommand().equals("第一頁")) cl.first(jpImage); //移至第一張卡片 else if(e.getActionCommand().equals("最後一頁")) cl.last(jpImage); //移至最後一張卡片 else if(e.getActionCommand().equals("ASP動態網頁入門實務")) cl.show(jpImage, "ASP動態網頁入門實務"); //移至描述內容為"ASP動態網頁入門實務"的卡片 } }; CardLayout cl = new CardLayout(10, 5); //宣告配置版面的CardLayout物件 JPanel jpImage = new JPanel(cl); //宣告容納圖片的JPanel容器 Mid(){ //以for迴圈將包含圖片的標籤元件與敘述加入容器 for(JLabel elm: lbImage) jpImage.add(elm , ((ImageIcon)elm.getIcon()).getDescription());

JPanel jpBtn = new JPanel(new GridLayout(5, 1, 20, 10)); //宣告JPanel物件並設定以GridLayout配置版面 jpBtn.add(btnFirst); //將按鈕元件加入JPanel容器 jpBtn.add(btnPre); jpBtn.add(btnNext); jpBtn.add(btnLast); jpBtn.add(btnName); //註冊處理滑鼠事件的監聽器 btnFirst.addActionListener(alBtn); btnPre.addActionListener(alBtn); btnNext.addActionListener(alBtn); btnLast.addActionListener(alBtn); btnName.addActionListener(alBtn); Container cp = getContentPane(); //取得內容面版 cp.setLayout(new FlowLayout()); //設定使用FlowLayout配置版面 cp.add(jpBtn); //將元件加入內容面版 cp.add(jpImage); //設定視窗預設的關閉動作、視窗大小, 並顯示視窗 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(450, 300); setVisible(true); } public static void main(String args[]) { new Mid(); //宣告視窗框架物件

由於指令按鈕沒有選取狀態,因此,若設定略過選取、選取與無效選取狀態使用的圖示,將看不出效果。範例7-4將示範設定指定按鈕在正常、略過、按下、無效這四個狀態使用不同圖示產生的效果。 自訂擁有蹦現功能表的按鈕 IE瀏覽器上方的工具列,有一種按下左方 ▼ 按鈕,便可呼叫蹦現功能表的按鈕控制項,如下圖所示。 範例7-5將以繼承JComponent類別的方式,定義類似上圖擁有蹦現功能表的按鈕元件,建立此按鈕元件的類別包含兩個指令按鈕,並擁有蹦現功能表,執行結果如下圖所示。

核取方塊 核取方塊的基本運用 核取方塊用於供使用者選取設定,如下圖所示。 本節將運用範例7-6介紹如何運用JCheckBox類別建立核取方塊元件,執行結果如下圖。

void itemStateChanged(ItemEvent e) 以下將說明JCheckBox類別建構子的規格: public JCheckBox() public JCheckBox(Icon icon) public JCheckBox(Icon icon, boolean selected) public JCheckBox(String text) public JCheckBox(Action a) public JCheckBox(String text, boolean selected) public JCheckBox(String text, Icon icon) public JCheckBox(String text, Icon icon, boolean selected) ItemEvent事件的回應 當使用者選取核取方塊將觸發ItemEvent事件,ItemEvent類別的繼承架構如下所示。 而回應ItemEvent事件的監聽器類別,需實作ItemListener介面。該介面定義了一個void itemStateChanged()方法,規格如下: void itemStateChanged(ItemEvent e)

ItemEvent類別除繼承自各基礎事件類別定義的方法外,還提供下表所列的方法。 7-3-2 運用圖示的核取方塊 當核取方塊運用圖示時,將不會出現供使用者勾選的方塊,而會以圖示取代。範例7-7將設定核取方塊使用圖示,並設定不同狀態下,顯示不同的圖示,執行結果如圖所示。

選擇按鈕與按鈕群組 範例 選擇按鈕 本節將運用範例7-8介紹選擇按鈕與按鈕群組的運用,執行結果如下圖所示。 視窗程式的選擇按鈕用於提供使用者在數種選項內,點選其中一種選項,如下圖所示。

選擇鈕ActionEvent事件的回應 按鈕群組 選擇按鈕的建立將運用JRadioButton類別。以下將說明JRadioButton類別建構子的規格: public JRadioButton() public JRadioButton(Icon icon) public JRadioButton(Icon icon, boolean selected) public JRadioButton(String text) public JRadioButton(Action a) public JRadioButton(String text, boolean selected) public JRadioButton(String text, Icon icon) public JRadioButton(String text, Icon icon, boolean selected) 選擇鈕ActionEvent事件的回應 對於加入相同按鈕群組的選擇按鈕,通常將運用同一個監聽器物件回應ActionEvent事件。至於各選擇按鈕的區分,則運用動作命令字串判別。以下敘述便運用前述技巧,定義回應同一按鈕群組內選擇按鈕之ActionEvent事件的監聽器物件(第18~33行)。 按鈕群組 ButtonGroup類別用於建立按鈕群組,可將數個按鈕元件(AbstractButton類別之衍生類別建立的按鈕元件),組合成一個群組。當其中一個按鈕元件被按下(on)時,群組內的其他按鈕元件的狀態便將被設定為取消(off)。ButtonGroup類別的繼承架構如下所示。

ButtonGroup類別只有一個建構子,且不需傳入任何參數,規格如下: public ButtonGroup() 下表將介紹ButtonGroup類別定義的方法。

切換按鈕 切換按鈕的用途與選擇按鈕類似,均可提供使用者在數個選項裡,選取一種選項。欲建立一組控制特定設定的切換按鈕,需運用JToggleButton類別,並配合建立按鈕群組的ButtonGroup類別(7-4-3節)。 範例7-9將示範運用切換按鈕控制標籤內文字的垂直方向對齊方式,執行結果如下圖所示。 以下將說明JToggleButton類別建構子的規格: public JToggleButton() public JToggleButton(Icon icon) public JToggleButton(Icon icon, boolean selected) public JToggleButton(String text) public JToggleButton(Action a) public JToggleButton(String text, boolean selected) public JToggleButton(String text, Icon icon) public JToggleButton(String text, Icon icon, boolean selected)

void stateChanged(ChangeEvent e) 7-4節的範例7-8將運用回應ActionEvent事件的方式,控制標籤內文字的水平對齊方式。範例7-9則運用回應JToogleButton類別ChangeEvent事件的機會,完成標籤內文字垂直方向對齊方式的控制。 而回應ChangeEvent事件的監聽器類別,需實作ChangeListener介面,此介面包含於javax.swing.event套件內。該介面定義了void itemStateChanged()方法,規格如下: void stateChanged(ChangeEvent e)