記事本 物件導向系統實務.

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
檔案處理.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
第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多媒体技术.
第七章 图形用户界面的设计与实现 学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等;
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
Ch07 介面與多重繼承 物件導向程式設計(II).
Ch08 基本輸出入與檔案處理 物件導向系統實務.
第三章 控制结构.
Java语言程序设计 马 皓
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
JAVA语言程序设计 第9章 图形用户界面 郑 莉.
问题 Jdbc连接数据库 下载数据库的驱动 Sql server 在微软的网站上可以下载 Sqlserver for jdbc driver
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Ch07 Java Applets 物件導向系統實務.
第六章 窗口系统和用户界面管理系统 山东大学计算机学院.
SWING 2018/11/23.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
电子商务技术基础 张宝明.
程式設計實作.
視窗程式設計 10. 組合方塊與對話盒 Chih Hung Wang Reference:
Java程序设计 第15章 创建用户界面.
記事本 物件導向系統實務.
第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
AWT Event Model.
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
事件處理.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十章 基于Swing的图形用户界面设计.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
4.5 对话框.
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
4.6 菜单.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
第二章 Java基本语法 讲师:复凡.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

記事本 物件導向系統實務

建立記事本的5步驟 建立視窗並加上文字區 加上選單功能表 為選單功能表上的選項加上聽者和動作

建立視窗並加上文字區

2018/12/4 JTextArea文字區域元件-說明 JTextArea文字區域元件能夠輸入或顯示多行文字內容,使用”\n”、”\n\r”或”\r”符號換行(需視作業系統而定),如下圖所示:

2018/12/4 JTextArea文字區域元件-說明 JTextArea文字區域元件使用”\n”、”\n\r”或”\r”符號換行(需視作業系統而定),如下所示: JTextArea area = new JTextArea("等待輸入資料...\n", 15, 30); JScrollPane scroll = new JScrollPane(area); 上述程式碼建立指定初始字串、寬和高的JTextArea物件,因為文字區域需要捲動,所以使用JScrollPane容器元件替文字區域加上捲動軸。

JTextArea建構子和方法 方法: 建構子: void append(String) JTextArea() 2018/12/4 JTextArea建構子和方法 方法: void append(String) void insert(String, int) void replaceRange(String, int, int) String getText() void setFont(Font) void setRows(int) void setColumns(int) int getColumns() int getLineCount() void setLineWrap(boolean) boolean getLineWrap() void setTabSize(int) int getTabSize() 建構子: JTextArea() JTextArea(String) JTextField(int, int) JTextField(String, int, int)

Step1: 視窗設計並加上文字區 主程式 視窗程式 import java.awt.*; import java.awt.event.*; class NoteBook extends JFrame { private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); } import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class MyNote { public static void main(String [] args) NoteBook nb = new NoteBook("記事本"); nb.setSize(500,500); nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); nb.setVisible(true); } NB1

執行結果

加上選單功能表

Menu屬MenuComponent的延伸類別 2018/12/4 Menu屬MenuComponent的延伸類別 10

Menu屬MenuComponent的延伸類別 2018/12/4 Menu屬MenuComponent的延伸類別 以「記事本」為例說明選單及其相關元件 11

Menu屬MenuComponent的延伸類別 2018/12/4 Menu屬MenuComponent的延伸類別 Menu位於視窗標題列的下方 使用選單時,框架(Frame)會有一個選單列(MenuBar),選單列內有數個選單(Menu) 每個Menu內會有多個選項(MenuItem)或核選式選項(CheckboxMenuItem),選單是選項的容器 選單也可以是另一個選單的容器 12

JMenuBar、JMenu與JMenuItem下拉式選單元件-說明 2018/12/4 JMenuBar、JMenu與JMenuItem下拉式選單元件-說明 在JFrame、JInternalFrame、JApplet和JDialog等類別的視窗新增下拉式功能表選單,類別建構子需要使用JMenuBar、JMenu和JMenuItem物件來建立下拉式功能表的物件。

JMenuBar、JMenu與JMenuItem下拉式選單元件- JMenuBar元件 2018/12/4 JMenuBar、JMenu與JMenuItem下拉式選單元件- JMenuBar元件 JMenuBar元件是視窗上方的功能表列,如下所示: JMenuBar jmb = new JMenuBar(); setJMenuBar(jmb); 上述程式碼建立JMenuBar物件後,預設是空的功能表列,然後使用setJMenuBar()方法新增到JFrame視窗,換句話說,目前在視窗上方已經擁有一個空的功能表列。

JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenu元件 2018/12/4 JMenuBar、JMenu與JMenuItem下拉式選單元件-JMenu元件 在建立好JMenuBar物件後,就可以新增功能表列下拉式子選單的JMenu物件,如下所示: JMenu file = new JMenu("檔案(F)"); JMenuItem item; file.add(item = new JMenuItem("新增(N)",KeyEvent.VK_N)); file.add(item = new JMenuItem("開啟(O)",KeyEvent.VK_O)); JMenu setting = new JMenu("參數設定"); file.add(setting); file.addSeparator(); file.add(item = new JMenuItem("關閉(X)",KeyEvent.VK_X)); jmb.add(file);

JMenuBar、JMenu與JMenuItem下拉式選單元件-Item元件 2018/12/4 JMenuBar、JMenu與JMenuItem下拉式選單元件-Item元件 JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuItem元件 JMenuItem、JCheckBoxMenuItem與JRadioButtonMenuItem類別的建構子可以新增選單的選項、核取方塊和選項鈕選項。

class NoteBook extends JFrame { private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; NoteBook(String title) super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案"); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案"); JMenuItem oldFile = new JMenuItem("開啟舊檔"); JMenuItem saveFile = new JMenuItem("儲存檔案"); JMenuItem exitNote = new JMenuItem("離開"); //將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote); //將檔案選單加到功能表上 mb.add(fileMenu); //將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); } NB2

執行結果

為新增的選單項目 加上LISTENER和相對應的動作(先處理開新檔和離開的動作)

class NoteBook extends JFrame { private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案"); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案"); JMenuItem oldFile = new JMenuItem("開啟舊檔"); JMenuItem saveFile = new JMenuItem("儲存檔案"); JMenuItem exitNote = new JMenuItem("離開"); NB3

//為開新檔案加上Listener和動作,動作是將文字區域清為空字串" newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.setText(""); } } ); //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 oldFile.addActionListener(new ActionListener () { textArea.setText("開啟舊檔還不能使用"); //為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 saveFile.addActionListener(new ActionListener () { textArea.setText("儲存檔案還不能使用"); //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { System.exit(0);

//將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote); //將檔案選單加到功能表上 mb.add(fileMenu); //將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); }

執行結果

練習:加上另一個編輯選單(含剪下,複製,貼上) 練習:加上另一個編輯選單(含剪下,複製,貼上) 

為剪下,複製,貼上加上聽者及動作 NB4

import java.awt.event.*; import javax.swing.*; import java.io.*; class MyNote { public static void main(String [] args) NoteBook nb = new NoteBook("記事本"); nb.setSize(500,500); nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); nb.setVisible(true); } class NoteBook extends JFrame private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案"); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案"); JMenuItem oldFile = new JMenuItem("開啟舊檔"); JMenuItem saveFile = new JMenuItem("儲存檔案"); JMenuItem exitNote = new JMenuItem("離開"); //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.setText(""); } } );

//為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 oldFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.setText("開啟舊檔還不能使用"); } } ); //為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 saveFile.addActionListener(new ActionListener () { textArea.setText("儲存檔案還不能使用"); //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { System.exit(0); //將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote); //將檔案選單加到功能表上 mb.add(fileMenu);

//建立選單功能表的第二個編輯選單 JMenu editMenu = new JMenu("編輯"); //建立編輯選單下的選項 JMenuItem cutEdit = new JMenuItem("剪下"); JMenuItem copyEdit = new JMenuItem("複製"); JMenuItem pasteEdit = new JMenuItem("貼上"); //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" cutEdit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.cut(); } } ); //為複製加上Listener和動作 copyEdit.addActionListener(new ActionListener () { textArea.copy(); //為貼上加上Listener和動作 pasteEdit.addActionListener(new ActionListener () { textArea.paste(); //將選項加到編輯中 editMenu.add(cutEdit); editMenu.add(copyEdit); editMenu.add(pasteEdit); //將編輯選單加到功能表上 mb.add(editMenu);

//將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); }

為選單功能表上的每一個選項加上快速鍵

快速鍵對應表 選單 選項 快速鍵 檔案 Alt+F 開新檔案 Alt+N 開啟舊檔 Alt+O 儲存檔案 Alt+S 離開 Alt+X 編輯 Alt+E 剪下 Alt+U 複製 Alt+C 貼上 Alt+P

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class MyNote { public static void main(String [] args) { NoteBook nb = new NoteBook("記事本"); nb.setSize(500,500); nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); nb.setVisible(true); } class NoteBook extends JFrame { private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; NoteBook(String title) { super(title); NB5

c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案(F)"); fileMenu.setMnemonic(KeyEvent.VK_F); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案(N)", KeyEvent.VK_N); JMenuItem oldFile = new JMenuItem("開啟舊檔(O)", KeyEvent.VK_O); JMenuItem saveFile = new JMenuItem("儲存檔案(S)", KeyEvent.VK_S); JMenuItem exitNote = new JMenuItem("離開(X)", KeyEvent.VK_X); //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.setText(""); } } ); //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 oldFile.addActionListener(new ActionListener () { textArea.setText("開啟舊檔還不能使用");

//為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 saveFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.setText("儲存檔案還不能使用"); } } ); //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { System.exit(0); //將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote); //將檔案選單加到功能表上 mb.add(fileMenu);

//建立選單功能表的第二個編輯選單 JMenu editMenu = new JMenu("編輯(E)"); editMenu.setMnemonic(KeyEvent.VK_E); //建立編輯選單下的選項 JMenuItem cutEdit = new JMenuItem("剪下(U)", KeyEvent.VK_U); JMenuItem copyEdit = new JMenuItem("複製(C)", KeyEvent.VK_C); JMenuItem pasteEdit = new JMenuItem("貼上(P)", KeyEvent.VK_P); //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" cutEdit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.cut(); } } ); //為複製加上Listener和動作 copyEdit.addActionListener(new ActionListener () { textArea.copy(); //為貼上加上Listener和動作 pasteEdit.addActionListener(new ActionListener () { textArea.paste();

//將選項加到編輯中 editMenu.add(cutEdit); editMenu.add(copyEdit); editMenu.add(pasteEdit); //將編輯選單加到功能表上 mb.add(editMenu); //將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); }

加入CHECKBOXMENUITEM和RADIOBUTTONMENUITEM等樣式的選單項目

import java.awt.event.*; import javax.swing.*; import java.io.*; class MyNote { public static void main(String [] args) NoteBook nb = new NoteBook("記事本"); nb.setSize(500,500); nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); nb.setVisible(true); } class NoteBook extends JFrame private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; private int bold = Font.PLAIN; private int italic = Font.PLAIN; private int fonts = 12;

NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案(F)"); fileMenu.setMnemonic(KeyEvent.VK_F); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案(N)", KeyEvent.VK_N); JMenuItem oldFile = new JMenuItem("開啟舊檔(O)", KeyEvent.VK_O); JMenuItem saveFile = new JMenuItem("儲存檔案(S)", KeyEvent.VK_S); JMenuItem exitNote = new JMenuItem("離開(X)", KeyEvent.VK_X); //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.setText(""); } } ); //為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 oldFile.addActionListener(new ActionListener () { textArea.setText("開啟舊檔還不能使用");

//為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 saveFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.setText("儲存檔案還不能使用"); } } ); //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { System.exit(0); //將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote); //將檔案選單加到功能表上 mb.add(fileMenu); //建立選單功能表的第二個編輯選單 JMenu editMenu = new JMenu("編輯(E)"); editMenu.setMnemonic(KeyEvent.VK_E); //建立編輯選單下的選項 JMenuItem cutEdit = new JMenuItem("剪下(U)", KeyEvent.VK_U); JMenuItem copyEdit = new JMenuItem("複製(C)", KeyEvent.VK_C); JMenuItem pasteEdit = new JMenuItem("貼上(P)", KeyEvent.VK_P); JMenuItem selectAllEdit = new JMenuItem("全選(A)", KeyEvent.VK_A);

//為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" cutEdit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.cut(); } } ); //為複製加上Listener和動作 copyEdit.addActionListener(new ActionListener () { textArea.copy(); //為貼上加上Listener和動作 pasteEdit.addActionListener(new ActionListener () { textArea.paste(); //為全選加上Listener和動作 selectAllEdit.addActionListener(new ActionListener () { textArea.selectAll(); //將選項加到編輯中 editMenu.add(cutEdit); editMenu.add(copyEdit); editMenu.add(pasteEdit); editMenu.add(selectAllEdit); //將編輯選單加到功能表上 mb.add(editMenu);

//建立選單功能表的第三個字型選單 JMenu fontMenu = new JMenu("字型(T)"); fontMenu.setMnemonic(KeyEvent.VK_T); //建立字型選單下的選項 JCheckBoxMenuItem boldCheck = new JCheckBoxMenuItem("粗體字"); JCheckBoxMenuItem italicCheck = new JCheckBoxMenuItem("斜體字"); ButtonGroup fontsGroup = new ButtonGroup(); JRadioButtonMenuItem smallFonts = new JRadioButtonMenuItem("10號"); JRadioButtonMenuItem midFonts = new JRadioButtonMenuItem("12號"); JRadioButtonMenuItem bigFonts = new JRadioButtonMenuItem("14號"); //為粗體字加上Listener和動作 boldCheck.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent a) { if(a.getStateChange() == ItemEvent.SELECTED) bold = Font.BOLD; else bold = Font.PLAIN; textArea.setFont(new Font("", bold+italic, fonts)); textArea.repaint(); } } ); //為斜體加上Listener和動作 italicCheck.addItemListener(new ItemListener() italic = Font.ITALIC; italic = Font.PLAIN;

//為10號字型大小加上Listener和動作 smallFonts.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent a) { if(a.getStateChange() == ItemEvent.SELECTED) fonts= 10; textArea.setFont(new Font("", bold+italic, fonts)); textArea.repaint(); } } ); //為12號字型大小加上Listener和動作 midFonts.addItemListener(new ItemListener() fonts= 12; //為14號字型大小加上Listener和動作 bigFonts.addItemListener(new ItemListener() fonts= 14; //將字型大小選項加到group中 fontsGroup.add(smallFonts); fontsGroup.add(midFonts); fontsGroup.add(bigFonts);

//將所有字型選項加到字型選單 fontMenu.add(boldCheck); fontMenu.add(italicCheck); fontMenu.addSeparator(); fontMenu.add(smallFonts); fontMenu.add(midFonts); fontMenu.add(bigFonts); //將字型選單加到功能表上 mb.add(fontMenu); //將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定字型 textArea.setFont(new Font("Serif", Font.PLAIN, 12)); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea); //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel); }

加上彈出表單(POPMENU)

JPopupMenu彈出式選單元件-說明 2018/12/4 JPopupMenu彈出式選單元件-說明 JPopupMenu彈出式選單元件繼承自JComponent,可以建立視窗應用程式滑鼠右鍵顯示的快顯功能表,內含選項的JMenuItem物件或JSeparator分隔線物件,如下圖所示:

JPopupMenu彈出式選單元件-建立物件 2018/12/4 JPopupMenu彈出式選單元件-建立物件 在建立JPopupMenu物件後,使用add()方法新增選項的JMenuItem物件,addSeparator()方法可以新增選單分隔線的JSeparator物件。 popup = new JPopupMenu(); popup.add(blue = new JMenuItem("藍色")); popup.add(yellow = new JMenuItem("黃色")); popup.add(green = new JMenuItem("綠色")); popup.addSeparator(); popup.add("紅色");

JPopupMenu彈出式選單元件-事件處理 2018/12/4 JPopupMenu彈出式選單元件-事件處理 新增MouseListener傾聽者物件且實作mousePressed()和mouseReleased()方法來顯示彈出式視窗,如下所示: public void mousePressed(MouseEvent evt) { if (evt.isPopupTrigger()) popup.show(evt.getComponent(), evt.getX(), evt.getY()); } public void mouseReleased(MouseEvent evt)

JPopupMenu建構子與方法 方法: 建構子: JMenuItem add(JMenuItem) 2018/12/4 JPopupMenu建構子與方法 方法: JMenuItem add(JMenuItem) JMenuItem add(String) void addSeparator() void insert(Component, int) void remove(JMenuItem) void remove(int) void removeAll() void show(Component, int, int) 建構子: JPopupMenu() JPopupMenu(String):參數String是標題文字

範例1:使用PopupMenu(1/4) 建立Popup Menu的選擇項: import javax.swing.*; 2018/12/4 範例1:使用PopupMenu(1/4) 建立Popup Menu的選擇項: import javax.swing.*; import java.awt.*; import java.awt.event.*; // 繼承JFrame類別, 實作ActionListener介面 public class Ch09_01 extends JFrame implements ActionListener { private JPopupMenu popup; private JMenuItem blue, yellow, green; private Container c; // 建構子 public Ch09_01() { super("JPopupMenu元件範例"); c = getContentPane(); c.setBackground(Color.pink); popup = new JPopupMenu(); popup.add(blue = new JMenuItem("藍色")); blue.addActionListener(this); popup.add(yellow = new JMenuItem("黃色")); yellow.addActionListener(this); popup.add(green = new JMenuItem("綠色")); green.addActionListener(this); popup.addSeparator(); popup.add("紅色"); // 使用字串新增選項

範例1:使用PopupMenu(2/4) 傾聽者: addMouseListener(new MouseAdapter() 2018/12/4 範例1:使用PopupMenu(2/4) 傾聽者: addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { if ( evt.isPopupTrigger() ) // 顯示選單 popup.show(evt.getComponent(), evt.getX(), evt.getY()); } public void mouseReleased(MouseEvent evt) });

範例1:使用PopupMenu(3/4) 實作事件處理方法: 2018/12/4 範例1:使用PopupMenu(3/4) 實作事件處理方法: public void actionPerformed(ActionEvent evt) { if ( evt.getSource() == blue ) c.setBackground(Color.blue); // 藍色 if ( evt.getSource() == yellow ) c.setBackground(Color.yellow); // 黃色 if ( evt.getSource() == green ) c.setBackground(Color.green); // 綠色 repaint(); // 重繪 }

範例1:使用PopupMenu(4/4) 主程式: public static void main(String[] args) 2018/12/4 範例1:使用PopupMenu(4/4) 主程式: public static void main(String[] args) { // 建立Swing應用程式 Ch09_01 app = new Ch09_01(); // 關閉視窗事件, 結束程式的執行 app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); app.setSize(300,200); // 設定尺寸 app.setVisible(true); // 顯示視窗 }

程式設計小叮嚀 要加上popupMenu時,要將與popupMenu相關的元件上加上一個MouseListener,在這個記事本是與textArea有關,所以: //為文字框加上popup textArea.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) popup.show(e.getComponent(), e.getX(), e.getY()); } public void mouseReleased(MouseEvent e) } ); 在同一個視窗上,也可以多個元件與popupMenu相關 NB7

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; class MyNote { public static void main(String [] args) NoteBook nb = new NoteBook("記事本"); nb.setSize(500,500); nb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); nb.setVisible(true); } class NoteBook extends JFrame private Container c; private JPanel panel; private JTextArea textArea; private JScrollPane sp; private JMenuBar mb; private int bold = Font.PLAIN; private int italic = Font.PLAIN; private int fonts = 12; private JPopupMenu popup;

NoteBook(String title) { super(title); c = getContentPane(); panel = new JPanel(); panel.setLayout(new BorderLayout()); //加上選單功能表 mb = new JMenuBar(); //建立選單功能表的第一個檔案選單 JMenu fileMenu = new JMenu("檔案(F)"); fileMenu.setMnemonic(KeyEvent.VK_F); //建立檔案選單下的選項 JMenuItem newFile = new JMenuItem("開新檔案(N)", KeyEvent.VK_N); JMenuItem oldFile = new JMenuItem("開啟舊檔(O)", KeyEvent.VK_O); JMenuItem saveFile = new JMenuItem("儲存檔案(S)", KeyEvent.VK_S); JMenuItem exitNote = new JMenuItem("離開(X)", KeyEvent.VK_X); //為開新檔案加上Listener和動作,動作是將文字區域清為空字串" newFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.setText(""); } } );

//為開啟舊檔加上Listener和動作, 動作要搭配FileChooser,暫不作 oldFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.setText("開啟舊檔還不能使用"); } } ); //為儲存檔案加上Listener和動作, 動作要搭配FileChooser,暫不作 saveFile.addActionListener(new ActionListener () { textArea.setText("儲存檔案還不能使用"); //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { System.exit(0); //將選項加到檔案中 fileMenu.add(newFile); fileMenu.add(oldFile); fileMenu.add(saveFile); //加一條分隔線 fileMenu.addSeparator(); fileMenu.add(exitNote);

//將檔案選單加到功能表上 mb.add(fileMenu); //建立選單功能表的第二個編輯選單 JMenu editMenu = new JMenu("編輯(E)"); editMenu.setMnemonic(KeyEvent.VK_E); //建立編輯選單下的選項 JMenuItem cutEdit = new JMenuItem("剪下(U)", KeyEvent.VK_U); JMenuItem copyEdit = new JMenuItem("複製(C)", KeyEvent.VK_C); JMenuItem pasteEdit = new JMenuItem("貼上(P)", KeyEvent.VK_P); JMenuItem selectAllEdit = new JMenuItem("全選(A)", KeyEvent.VK_A); //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" cutEdit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.cut(); } } ); //為複製加上Listener和動作 copyEdit.addActionListener(new ActionListener () { textArea.copy();

//為貼上加上Listener和動作 pasteEdit.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.paste(); } } ); //為全選加上Listener和動作 selectAllEdit.addActionListener(new ActionListener () { textArea.selectAll(); //將選項加到編輯中 editMenu.add(cutEdit); editMenu.add(copyEdit); editMenu.add(pasteEdit); editMenu.add(selectAllEdit); //將編輯選單加到功能表上 mb.add(editMenu); //建立選單功能表的第三個字型選單 JMenu fontMenu = new JMenu("字型(T)"); fontMenu.setMnemonic(KeyEvent.VK_T);

//建立字型選單下的選項 JCheckBoxMenuItem boldCheck = new JCheckBoxMenuItem("粗體字"); JCheckBoxMenuItem italicCheck = new JCheckBoxMenuItem("斜體字"); ButtonGroup fontsGroup = new ButtonGroup(); JRadioButtonMenuItem smallFonts = new JRadioButtonMenuItem("10號"); JRadioButtonMenuItem midFonts = new JRadioButtonMenuItem("12號"); JRadioButtonMenuItem bigFonts = new JRadioButtonMenuItem("14號"); //為粗體字加上Listener和動作 boldCheck.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent a) { if(a.getStateChange() == ItemEvent.SELECTED) bold = Font.BOLD; else bold = Font.PLAIN; textArea.setFont(new Font("", bold+italic, fonts)); textArea.repaint(); } } ); //為斜體加上Listener和動作 italicCheck.addItemListener(new ItemListener() italic = Font.ITALIC; italic = Font.PLAIN;

//為10號字型大小加上Listener和動作 smallFonts.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent a) { if(a.getStateChange() == ItemEvent.SELECTED) fonts= 10; textArea.setFont(new Font("", bold+italic, fonts)); textArea.repaint(); } } ); //為12號字型大小加上Listener和動作 midFonts.addItemListener(new ItemListener() fonts= 12; //為14號字型大小加上Listener和動作 bigFonts.addItemListener(new ItemListener() fonts= 14;

//將字型大小選項加到group中 fontsGroup.add(smallFonts); fontsGroup.add(midFonts); fontsGroup.add(bigFonts); //將所有字型選項加到字型選單 fontMenu.add(boldCheck); fontMenu.add(italicCheck); fontMenu.addSeparator(); fontMenu.add(smallFonts); fontMenu.add(midFonts); fontMenu.add(bigFonts); //將字型選單加到功能表上 mb.add(fontMenu); //將選單功能表加到視窗上 panel.add(mb, BorderLayout.NORTH); //設定文字框 textArea = new JTextArea(); //設定字型 textArea.setFont(new Font("Serif", Font.PLAIN, 12)); //設定文字過長時自動折行 textArea.setLineWrap(true); //加上捲軸 sp = new JScrollPane(textArea);

//在文字框上加裝popup選單 popup = new JPopupMenu(); //建立popup選單下的選項 JMenuItem popCut = new JMenuItem("剪下"); JMenuItem popCopy = new JMenuItem("複製"); JMenuItem popPaste = new JMenuItem("貼上"); JMenuItem popSelectAll = new JMenuItem("全選"); //為剪下加上Listener和動作,動作是將文字區域中被選的文字剪掉" popCut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { textArea.cut(); } } ); //為複製加上Listener和動作 popCopy.addActionListener(new ActionListener () { textArea.copy(); //為貼上加上Listener和動作 popPaste.addActionListener(new ActionListener () { textArea.paste();

//為全選加上Listener和動作 popSelectAll.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { textArea.selectAll(); } } ); //將選項加到popup中 popup.add(popCut); popup.add(popCopy); popup.add(popPaste); popup.add(popSelectAll); //為文字框加上popup textArea.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) popup.show(e.getComponent(), e.getX(), e.getY()); public void mouseReleased(MouseEvent e) //將文字框及捲軸加到視窗上 panel.add(sp, BorderLayout.CENTER); c.add(panel);

修飾”離開”,出現對話窗 新增關於記事本的對話窗

2018/12/4 JDialog最上層容器類別-說明 「對話方塊」(Dialog)是一種很重要的視窗介面,在視窗應用程式的執行過程中,一定會出現一些對話方塊,如果對話方塊會擱置使用者輸入資料至其它視窗,這種對話方塊稱為「程式的對話方塊」(Modal Dialog)。 2018/12/4 66

2018/12/4 JDialog最上層容器類別-類別架構 在Swing套件可以使用JOptionPane類別建立程式的對話方塊,否則需要直接使用JDialog類別來建立,其繼承架構如下圖所示: 2018/12/4 67

2018/12/4 JDialog最上層容器類別-建構子 JDialog類別的建構子,如下表所示: 2018/12/4 68

JDialog最上層容器類別- showMessageDialog()方法 2018/12/4 JDialog最上層容器類別- showMessageDialog()方法 showMessageDialog()方法可以顯示【確定】按鈕的訊息視窗,如下所示: JOptionPane.showMessageDialog(jpane, "這是一個測試的訊息視窗!"); 2018/12/4 69

範例2(1/4) 2018/12/4 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Ch06_02 extends JFrame { //建構子 public Ch06_02() { super("顯示三種對話方塊範例"); //宣告JButton 物件 final JButton button1, button2, button3; Container c = getContentPane(); //建立JPanel物件 final JPanel jpane = new JPanel(); final JLabel label = new JLabel("測試對話方塊"); jpane.add(label); button1 = new JButton("showMessageDialog按鈕"); //新增滑鼠事件處理 button1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) label.setText("按下showMessageDialog按鈕"); JOptionPane.showMessageDialog(jpane, "這是一個測試的訊息視窗!"); } } ); jpane.add(button1);

JDialog最上層容器類別- showConfirmDialog()方法 2018/12/4 JDialog最上層容器類別- showConfirmDialog()方法 showConfirmDialog()方法可以顯示詢問問題的對話方塊,如下所示: int n = JOptionPane.showConfirmDialog(jpane, "您是否已經按下showMessageDialog按鈕? ", "操作問題", JOptionPane.YES_NO_OPTION); 2018/12/4 71

範例2(2/4) button2 = new JButton("showConfirmDialog按鈕"); //新增滑鼠事件處理 2018/12/4 範例2(2/4) button2 = new JButton("showConfirmDialog按鈕"); //新增滑鼠事件處理 button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) int n = JOptionPane.showConfirmDialog(jpane, "您是否已經按下showMessageDialog按鈕?", "操作問題", JOptionPane.YES_NO_OPTION); if (n==JOptionPane.YES_OPTION) label.setText("按下是"); else if(n==JOptionPane.NO_OPTION) label.setText("按下否"); label.setText("沒有選擇"); } } ); jpane.add(button2);

JDialog最上層容器類別- showOptionDialog()方法(說明) 2018/12/4 JDialog最上層容器類別- showOptionDialog()方法(說明) showOptionDialog()方法可以顯示指定標題文字、圖示、訊息和按鈕的對話方塊,如下所示: Object[] options = {"showMessageDialog按鈕", "showConfirmDialog按鈕"}; int m = JOptionPane.showOptionDialog(jpane, "哪一個按鈕顯示警告訊息?", "操作問題", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); 2018/12/4 73

範例2(3/4) 2018/12/4 button3 = new JButton("showOptionDialog按鈕"); button3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) Object[] options = {"showMessageDialog按鈕", "showConfirmDialog按鈕"}; int m = JOptionPane.showOptionDialog(jpane, "哪一個按鈕顯示警告訊息?", "操作問題", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); switch (m) case JOptionPane.YES_OPTION: label.setText("選showMessageDialog按鈕"); break; case JOptionPane.NO_OPTION: label.setText("選showConfirmDialog按鈕"); default: label.setText("沒有選擇"); } } ); jpane.add(button3); c.add(jpane);

範例2(4/4主程式) public static void main(String [] args) { 2018/12/4 範例2(4/4主程式) public static void main(String [] args) { Ch06_02 app = new Ch06_02(); app.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) { System.exit(0); } } ); app.setSize(300,150); app.setVisible(true); }

使用SHOWMESSAGEDIALOGD來顯示“關於” 使用SHOWCONFIRMDIALOG來處理“離開”

加上說明和關於 //建立選單功能表的第四個說明選單 JMenu aboutMenu = new JMenu("說明"); //建立說明選單下的選項 JMenuItem aboutMenuItem = new JMenuItem("關於"); //為關於加上Listener和動作 aboutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent a) { JOptionPane.showMessageDialog(panel, "這是我的第1版記事本,我會再接再厲,謝謝使用!"); } } ); //將關於選項加到說明選單上 aboutMenu.add(aboutMenuItem); //將說明選單加到功能表上 mb.add(aboutMenu);

修改離開系統 //為離開加上Listener和動作, 動作要搭配FileChooser,暫不作 exitNote.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { int n = JOptionPane.showConfirmDialog(panel, "是否要離開?", "", JOptionPane.YES_NO_OPTION); if (n==JOptionPane.YES_OPTION) System.exit(0); } } );

JFILECHOOSER選擇檔案

2018/12/4 檔案與色彩選擇元件-說明 Swing套件擁有瀏覽檔案系統選取檔案或資料夾的JFileChooser和選取色彩的JColorChooser元件2種選擇元件,這2個元件都是繼承自JComponent,其繼承架構如下圖所示:

JFileChooser檔案選擇元件-說明 2018/12/4 JFileChooser檔案選擇元件-說明 JFileChooser檔案選擇元件可以顯示對話方塊瀏覽檔案系統,以便讓使用者選取檔案或資料夾。

JFileChooser檔案選擇元件-開啟檔案對話方塊 2018/12/4 JFileChooser檔案選擇元件-開啟檔案對話方塊 例如:開啟或儲存指定檔案,如下所示: JFileChooser jfc = new JFileChooser(); 上述程式碼建立JFileChooser物件後,使用showOpenDialog()方法顯示開啟檔案對話方塊,如下所示: int n = jfc.showOpenDialog(Ch11_4_1.this); if (n == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); …… }

JFileChooser檔案選擇元件-儲存檔案對話方塊 2018/12/4 JFileChooser檔案選擇元件-儲存檔案對話方塊 儲存檔案對話方塊是使用showSaveDialog()方法來顯示,如下所示: int m = jfc.showSaveDialog(Ch11_4_1.this); if (m == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); …… }

利用JFILECHOOSER來 開啟舊檔案 NB9 但此處只取得檔案名稱,並沒有真的開啟檔案

//為開啟舊檔加上Listener和動作, 動作要搭配FileChooser oldFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { JFileChooser jfc = new JFileChooser(); int n = jfc.showOpenDialog(NoteBook.this); if( n == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); textArea.setText("開啟舊檔" + file.getName()); } } );

利用JFILECHOOSER來儲存檔案 NB9 但此處只取得檔案名稱,並沒有真的儲存

//為儲存檔案加上Listener和動作, 動作要搭配FileChooser saveFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { JFileChooser jfc = new JFileChooser(); int n = jfc.showSaveDialog(NoteBook.this); if( n == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); textArea.setText("儲存檔案" + file.getName()); } } );

FILEWRITER和BUFFEREDWRITER資料寫入檔案中

//為儲存檔案加上Listener和動作, 動作要搭配FileChooser saveFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { jfc = new JFileChooser(); int n = jfc.showSaveDialog(NoteBook.this); if( n == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); try { FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); bw.write(textArea.getText()); bw.close(); } catch (Exception e) {} } ); NB10

FILEREADER和BUFFEREDREADER資料寫入檔案中

//為開啟舊檔加上Listener和動作, 動作要搭配FileChooser oldFile.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent a) { jfc = new JFileChooser(); int n = jfc.showOpenDialog(NoteBook.this); if( n == JFileChooser.APPROVE_OPTION) { File file = jfc.getSelectedFile(); try { FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String str; while((str = br.readLine()) != null) { textArea.append(str + "\r\n"); } br.close(); catch (Exception e) {} } );