下載/瀏覽

Download Report

Transcript 下載/瀏覽

第11章 Swing的圖形介面元件





11-1
11-2
11-3
11-4
11-5
基本圖形介面元件
JTextComponents文字元件
視窗功能表和工具列元件
檔案與色彩選擇元件
多重視窗介面JInternalFrame
11-1 基本圖形介面元件






11-1-1
11-1-2
11-1-3
11-1-4
11-1-5
11-1-6
軸元件
JLabel與JButton標籤與按鈕元件
JCheckBox核取方塊元件
JRadioButton選項鈕元件
JComboBox下拉式清單元件
JList清單方塊元件
JScrollBar與JSlider捲動與滑動
11-1 基本圖形介面元件-說明

Swing套件的圖形介面元件都是繼承自
JComponent,各圖形元件類別的繼承架
構,如下圖所示:
11-1 基本圖形介面元件-方法1

JComponet類別關於圖形介面元件的相關
方法,如下表所示:
方法
說明
void setForeground(Color)
設定元件的前景色彩
Color getForeground()
取得元件的前景色彩
void setBackground(Color)
設定元件的背景色彩
Color getBackground()
取得元件的背景色彩
void setOpaque(boolean) 設定元件是否不透明,true 為是,false 為否,
不透明元件將使用背景色彩填滿
11-1 基本圖形介面元件-方法2
boolean isOpaque()
void setToolTipText(String)
void setEnabled(boolean)
boolean isEnabled()
void setVisible(boolean)
boolean isVisible()
檢查是否不透明,true 為是,false 為否
設定 JComponent 元件的提示說明文字
設定元件是否作用,ture 為有作用,false 是
沒有作用,一個作用的元件可以回應使用者
輸入或產生事件物件
檢查元件是否有作用,true 為有,false 為無
設定元件是否顯示,參數 boolean 為 true 表
示顯示,false 為隱藏
檢查元件是否顯示,true 為是,false 為否
11-1-1 JLabel與JButton標籤與按鈕
元件-JLabel元件(說明)

JLabel元件繼承自JComponent類別,可
以顯示一段文字內容或圖示(需要配合
ImageIcon物件載入圖片),主要的目的
是說明使用介面的欄位用途,或顯示訊息
文字。例如:使用JLabel元件顯示文字欄
位名稱”關閉”和red.gif圖片,如下所示:
JLabel label = new JLabel("關閉");
JLabel label1 = new JLabel(new
ImageIcon("red.gif"));
11-1-1 JLabel與JButton標籤與按鈕
元件-JLabel元件(圖例)
11-1-1 JLabel與JButton標籤與按鈕
元件-JButton元件(建立物件)

JButton元件繼承自AbstractButton類別,
這是可以使用滑鼠按一下的按鈕元件,如
下所示:
JButton button1 = new JButton("切換
(Alt_S)");
JButton button2 = new JButton(new
ImageIcon("yellow.gif"));

上述程式碼建立的JButton物件,其建構子
參數分別為字串和圖形,字串是顯示在按
鈕上的說明文字。
11-1-1 JLabel與JButton標籤與按鈕
元件-JButton元件(事件處理)

JButton元件的目的是為了讓使用者按一下按鈕,所以
JButton元件需要新增傾聽者物件進行事件處理,如下所
示:
button1.addActionListener(new
ActionListener()
{ public void actionPerformed(ActionEvent
evt)
{
if ( flag == 0 ) label.setText("開啟");
else
label.setText("關閉");
flag = 1 - flag;
}
});
11-1-2 JCheckBox核取方塊元件
-說明

JCheckBox核取方塊元件繼承自
JToggleButton,屬於AbstractButton的
子類別,這個元件是一個開關,按一下可
以更改狀態值為true或false,顯示的外觀
為是在核取方塊中打勾,其初始值為false,
即沒有打勾。
11-1-2 JCheckBox核取方塊元件
-範例

程式碼建立名為”綠色(G)”的核取方塊,
選取核取方塊需要新增ItemListener傾聽
者物件來進行處理。
JCheck Box greenBox = new JCheckBox("
綠色(G)");
………
greenBox.addItemListener(this);
11-1-3 JRadioButton選項鈕元件
-說明

JRadioButton選項鈕元件也是繼承自
JToggleButton,屬於AbstractButton的子類別,
通常為一組選項鈕的單選題,在一組選項鈕中,
按一下選項鈕就可以更改狀態值為true或false,
在一組選項鈕只能有一個選項鈕為true。
11-1-3 JRadioButton選項鈕元件
-範例

選項鈕元件為一組,所以需要使用
ButtonGroup物件建立這組選項鈕,如下
所示:
ButtonGroup buttonGroup = new ButtonGroup();
baby1Button = new JRadioButton("女寶寶(F)");
………
baby1Button.addItemListener(this);
buttonGroup.add(baby1Button);
baby2Button = new JRadioButton("男寶寶(M)");
………
baby2Button.addItemListener(this);
buttonGroup.add(baby2Button);
11-1-4 JComboBox下拉式清單
元件-說明

JComboBox下拉式清單元件是繼承自
JComponent,這種選擇元件只顯示一個
項目(目前選擇的選項),需要按一下旁
邊的向下箭頭,才會拉出整張選單的選項。
11-1-4 JComboBox下拉式清單
元件-建立

建立JComboBox元件是使用字串陣列新增
選項。JComboBox元件在實作上需要新增
ActionListener或ItemListener傾聽者物
件來進行處理。
String[] items={"使用現金","使用信用卡","
直接轉帳","使用支票"};
JComboBox list = new JComboBox(items);
11-1-4 JComboBox下拉式清單
元件-可編輯

JComboBox元件擁有2種不同形式,在前
述建立的JComboBox元件是不可編輯選項,
如需編輯,請加上下列程式碼,如下所示:
list.setEditable(true);

上述程式碼設定JComboBox元件的選項是
可編輯的,如果沒有所需的選項,可以如
同文字欄位一般自行輸入和新增選項。
11-1-5 JList清單方塊元件-說明

JList清單方塊元件也是繼承自
JComponent,這個元件可以顯示整張清
單選項,而且允許複選,如下圖所示:
11-1-5 JList清單方塊元件-唯讀

程式碼使用字串陣列建立JList元件的清單
方塊,建構子預設建立的JList元件並不能
新增、刪除和取代選項,JList元件需要使
用JScrollPane來新增清單方塊的捲動軸。
String[] names = {"陳會安", "江小魚", "劉得華
", "郭負成"};
JList fixedList = new JList(names);
JScrollPane scroll1 =
new JScrollPane(fixedList);
11-1-5 JList清單方塊元件-可編輯

建立允許新增、刪除和取代選項的清單方
塊JList元件,請使用DefaultListModel物
件建立JList元件,如下所示:
DefaultListModel dlistModel = new
DefaultListModel();
for (int i = 0; i < names.length; i++)
dlistModel.addElement(names[i]);
nameList = new JList(dlistModel);

上述程式碼在建立好DefaultListModel物
件後,使用addElement()方法新增選項。
11-1-6 JScrollBar與JSlider捲動
與滑動軸元件-說明

JScrollBar與JSlider元件的操作十分相似,
都是調整捲動軸中的方塊或滑動軸的指標
來取得使用者選擇的比例值,只不過
JScrollBar元件多了2個方向箭的調整鈕。
11-1-6 JScrollBar與JSlider捲動與滑
動軸元件-JScrollBar元件

JScorllBar元件繼承自JComponent元件,
在建立好JScrollBar元件後,只需調整捲動
軸就可以傳回指定範圍的值,如下所示:
JScrollBar s3 = new
JScrollBar(JScrollBar.HORIZONTAL,50,10
,0,100);

上述程式碼建立水平捲動軸,最後2個參數
指出範圍值是0~100,目前值為50,因為
可見區域為10,所以實際的捲動值需刪除
可見區域10,所以是0~90。
11-1-6 JScrollBar與JSlider捲動與滑
動軸元件-JSlider元件

JSlider元件是繼承自JComponent元件,
在建立好JSlider元件後,只需調整滑動軸
中間的指標就可以傳回指定範圍的值,如
下所示:
JSlider s4 = new
JSlider(JSlider.HORIZONTAL, 0, 100, 50);

上述程式碼建立水平滑動軸,中間2個參數
指出範圍值是0~100,最後1個參數是目
前值為50。
11-2 JTextComponent文字元件


11-2-1 JTextField與JPasswordField文
字方塊元件
11-2-2 JTextArea文字區域元件
11-2 JTextComponent文字元件

Swing套件的文字元件可以讓使用者輸入
文字內容,在本節說明的文字元件是繼承
自JTextComponent,其繼承架構,如下
圖所示:
11-2-1 JTextField與JPasswordField
文字方塊元件-說明

JTextField文字方塊元件是用來輸入或顯示一行
可捲動的文字內容,JPasswordField也是相同,
只是輸入的文字是使用替代字元顯示。
11-2-1 JTextField與JPasswordField
文字方塊元件-程式碼

JTextField文字方塊元件與
JPasswordField的建構子參數是欄位寬度,
如下所示:
JTextField text = new JTextField(12);
JPasswordField password = new
JPasswordField(12);
11-2-2 JTextArea文字區域元件說明

JTextArea文字區域元件能夠輸入或顯示多
行文字內容,使用”\n”、”\n\r”或”\r”符
號換行(需視作業系統而定),如下圖所
示:
11-2-2 JTextArea文字區域元件-說
明

JTextArea文字區域元件使
用”\n”、”\n\r”或”\r”符號換行(需視作
業系統而定),如下所示:
JTextArea area = new JTextArea("等待輸入
資料...\n", 15, 30);
JScrollPane scroll = new JScrollPane(area);

上述程式碼建立指定初始字串、寬和高的
JTextArea物件,因為文字區域需要捲動,
所以使用JScrollPane容器元件替文字區域
加上捲動軸。
11-3 視窗功能表和工具列元件



11-3-1 JPopupMenu彈出式選單元件
11-3-2 JMenuBar、JMenu與
JMenuItem下拉式選單元件
11-3-3 JToolBar工具列元件
11-3 視窗功能表和工具列元件


Swing套件提供功能強大的視窗功能表和工具列
元件,可以輕鬆建立應用程式視窗上方的下拉式
功能表、工具列和彈出式選單。
同樣的,視窗功能表和工具列元件也都是繼承自
JComponent,其繼承架構如下圖所示:
11-3-1 JPopupMenu彈出式選單元
件-說明

JPopupMenu彈出式選單元件繼承自
JComponent,可以建立視窗應用程式滑鼠右鍵
顯示的快顯功能表,內含選項的JMenuItem物件
或JSeparator分隔線物件,如下圖所示:
11-3-1 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("紅色");

11-3-1 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)
{ if (evt.isPopupTrigger())
popup.show(evt.getComponent(),
evt.getX(), evt.getY());
}
11-3-2 JMenuBar、JMenu與
JMenuItem下拉式選單元件-說明

在JFrame、JInternalFrame、JApplet和
JDialog等類別的視窗新增下拉式功能表選
單,類別建構子需要使用JMenuBar、
JMenu和JMenuItem物件來建立下拉式功
能表的物件。
11-3-2 JMenuBar、JMenu與JMenuItem
下拉式選單元件- JMenuBar元件

JMenuBar元件是視窗上方的功能表列,如
下所示:
JMenuBar jmb = new JMenuBar();
setJMenuBar(jmb);

上述程式碼建立JMenuBar物件後,預設是
空的功能表列,然後使用setJMenuBar()
方法新增到JFrame視窗,換句話說,目前
在視窗上方已經擁有一個空的功能表列。
11-3-2 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);

11-3-2 JMenuBar、JMenu與JMenuItem
下拉式選單元件-Item元件
JMenuItem、JCheckBoxMenuItem與
JRadioButtonMenuItem元件
 JMenuItem、JCheckBoxMenuItem與
JRadioButtonMenuItem類別的建構子可
以新增選單的選項、核取方塊和選項鈕選
項。
11-3-3 JToolBar工具列元件-說明

JToolBar工具列元件繼承自JComponent
類別,可以建立視窗的工具列按鈕,它也
屬於一種容器元件,在建立好JToolBar物
件後,就可以新增GUI元件到工具列,如下
圖所示:
11-3-3 JToolBar工具列元件-建立物
件

程式碼在建立好JToolBar元件後,使用add()方
法新增GUI元件,最後只需將JToolBar元件視為
GUI元件,新增到最上層容器物件即可。
JToolBar toolBar = new JToolBar();
blue = new JButton(new ImageIcon("blue1.gif"));
yellow = new JButton(new
ImageIcon("yellow1.gif"));
green = new JButton(new
ImageIcon("green1.gif"));
toolBar.add(blue);
toolBar.add(yellow);
toolBar.add(green);
11-4 檔案與色彩選擇元件


11-4-1 JFileChooser檔案選擇元件
11-4-2 JColorChooser色彩選擇元件
11-4 檔案與色彩選擇元件-說明

Swing套件擁有瀏覽檔案系統選取檔案或
資料夾的JFileChooser和選取色彩的
JColorChooser元件2種選擇元件,這2個
元件都是繼承自JComponent,其繼承架
構如下圖所示:
11-4-1 JFileChooser檔案選擇元件說明

JFileChooser檔案選擇元件可以顯示對話
方塊瀏覽檔案系統,以便讓使用者選取檔
案或資料夾。
11-4-1 JFileChooser檔案選擇元件開啟檔案對話方塊

例如:開啟或儲存指定檔案,如下所示:
JFileChooser jfc = new JFileChooser();

上述程式碼建立JFileChooser物件後,使
用showOpenDialog()方法顯示開啟檔案
對話方塊,如下所示:
int n =
jfc.showOpenDialog(Ch11_4_1.this);
if (n == JFileChooser.APPROVE_OPTION)
{ File file = jfc.getSelectedFile();
…… }
11-4-1 JFileChooser檔案選擇元件儲存檔案對話方塊

儲存檔案對話方塊是使用
showSaveDialog()方法來顯示,如下所
示:
int m =
jfc.showSaveDialog(Ch11_4_1.this);
if (m == JFileChooser.APPROVE_OPTION)
{ File file = jfc.getSelectedFile();
……
}
11-4-2 JColorChooser色彩選擇元件
-說明

JColorChooser色
彩選擇元件提供多
種標籤和調色盤的
色彩選擇對話方塊,
如果Java應用程式
需要讓使用者選擇
色彩,就可以使用
JColorChooser元
件,如右圖所示:
11-4-2 JColorChooser色彩選擇元件
-建立物件

JColorChooser色彩選擇元件的建立,如
下所示:
JColorChooser jcc = new JColorChooser();

程式碼建立JColorChooser物件後,使用
showDialog()方法顯示色彩選擇對話方塊,
如下所示:
Color newColor =
jcc.showDialog(Ch11_4_2.this, "選擇背景
色彩", c.getBackground());
if (newColor != null)
c.setBackground(newColor);
11-5 多重視窗介面JInternalFrame說明

一般來說,視窗應用程式都不會只有一個
視窗,如果需要在JFrame視窗開啟其它視
窗,就可以使用JInternalFrame類別在
JFrame視窗內建立多重視窗。其繼承架構
如下圖所示:
11-5 多重視窗介面JInternalFrameJDesktopPane和JLayeredPane類別

JInternalFrame物件是新增在
JDesktopPane物件(在使用上如同
JFrame的ContentPane),所以需要先
建立JDesktopPane物件,如下所示:
JDesktopPane jdesktop = new
JDesktopPane();

上述程式碼建立JDesktopPane物件後,
JInternalFrame物件就是新增到此容器物
件,因為JDesktopPane是JLayeredPane
的子類別,所以能夠建立多個重疊的內層
視窗。
11-5 多重視窗介面JInternalFrame-
JInternalFrame類別(說明)
JInternalFrame類別

在JInternalFrame類別部分,筆者準備直接繼承
JInternalFrame建立InternalFrame類別。
11-5 多重視窗介面JInternalFrame-
JInternalFrame類別(範例)
class InternalFrame extends JInternalFrame
{ static int iframeCount = 0;
static final int offsetX = 25;
static final int offsetY = 25;
public InternalFrame()
{ super("內層視窗: " + (++iframeCount),
true,
// 可調整尺寸
true,
// 可關閉
true,
// 可最大化
true);
// 可縮小成圖示
setSize(300,200); // 設定尺寸
// 設定位置
setLocation(offsetX*iframeCount,
offsetY*iframeCount);
}
}
11-5 多重視窗介面JInternalFrame-
JInternalFrame類別
(createInternalFrame()方法)
private void createInternalFrame()
{ InternalFrame iframe = new
InternalFrame();
iframe.setVisible(true); // 顯示內層視窗
jdesktop.add(iframe); // 加入上層視窗
try {
iframe.setSelected(true);
}catch(java.beans.PropertyVetoException
e){}
}