6.5 AWT元件 AWT(Abstract Windowing Toolkit)元件是一組典型的Java
GUI元件(Components),它們都是繼承 java.awt.Component:
Canvas
TextField
TextArea
Label
List
Button
Choice
Checkbox
Frame
JButton
JLabel
JComboBox
JMenu
每一個元件都具有以下功能:
事件處理(訊息回應函式):listener...
基本繪圖功能:repaint, update,paint...
視窗外觀:font, color, position, dimensions...
Labels
範例6.5.1:
import java.applet.*;
import java.awt.*;
public class LabelEx extends Applet
{
public void init()
{
Label t;
t = new Label("義守電機");
this.add(t);
}
}
結果瀏覽
使用AWT元件的三個步驟:
- 宣告一個元件
- 元件的初值化
- 將原件加入版面配置
這三個步驟可以寫在一起:
add(new
Label("義守電機"));
Label的成員函式: public final static int LEFT
public final static int CENTER
public final static int RIGHT
public Label()
public Label(String text)
public Label(String text, int alignment)
public void addNotify()
public int getAlignment()
public synchronized void setAlignment(int alignment)
public String getText()
public synchronized void setText(String text)
使用範例: Label center = new Label("對中切齊", Label.CENTER);
Label left = new Label("對左切齊", Label.LEFT);
Label right = new Label("對右切齊", Label.RIGHT);
String s = t.getText();
t.setText("新內容");
Button元件
使用模式
Button b;
b = new Button("My First Button");
this.add(b);
範例6.5.2
import java.applet.*;
import java.awt.*;
public class FirstButton extends Applet
{
public void init ()
{
this.add(new Button("My First Button"));
}
}
結果瀏覽:
包含兩個Button元件的 applet:
import java.applet.*;
import java.awt.*;
public class Button1 extends Applet
{
Button
b1 = new Button("Button 1"),
b2 = new Button("Button 2");
public void init()
{
this.add(b1);
this.add(b2);
}
}
結果瀏覽:
事件趨動(Event Driven)的回應
加入ActionListener 來回應buttons的事件,例:
Button beep = new Button("請按下本按鈕"); //產生一個Button元件
add(beep); //加入版面配置
beep.addActionListener(myActionListener); // 將元件assign給一個listener
myActionListener是 java.awt.event.ActionListener interface的一個物件,它只有一個成員函式:
public abstract
void actionPerformed(ActionEvent e)
範例6.5.3:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class BeepApplet extends Applet implements ActionListener
{
public void init ()
{
Button beep = new Button("Beep"); // Construct the button
this.add(beep);// add the button to the layout
beep.addActionListener(this);// specify action events
}
public void actionPerformed(ActionEvent e)
{
Toolkit.getDefaultToolkit().beep();
}
}
結果瀏覽:
文字編輯元件:TextField
TextField 具有4個 constructors:
public TextField()
public TextField(String text)
public TextField(int num_chars)
public TextField(String text, int num_chars)
使用範例:
TextField name = new TextField("在此編輯");
TextField social_security = new TextField(11);
重要成員函式:
getText() 可取出TextField的內容。
setText(String s) 更改TextField的內容。
範例6.5.4:
import java.awt.*; import java.applet.*;
public class TextFieldApplet extends Applet
{ public void init() { TextField
input = new TextField("在此編輯",10); add(input);
} }
結果瀏覽:
TextArea元件
TextArea有五個建構者函式 :
public TextArea()
public TextArea(String text)
public TextArea(int rows, int columns)
public TextArea(String text, int rows, int columns)
public TextArea(String text, int rows, int columns, int scrollbars)
使用範例:
TextArea address = new TextArea("Type your address here", 5, 80);
TextAreas物件的預設值沒有 scrollbars,我們可以使用下列4個值來設定scrollbars:
TextArea.SCROLLBARS_BOTH
TextArea.SCROLLBARS_HORIZONTAL_ONLY
TextArea.SCROLLBARS_NONE
TextArea.SCROLLBARS_VERTICAL_ONLY
例如
TextArea instructions =
new TextArea("", 15, 70, TextArea.SCROLLBARS_VERTICAL_ONLY);
如同TextField, TextArea 也有
getText(): 可取出TextField的內容。
setText(String s): 更改TextField的內容。
兩個成員函式,另外它還有加入和取代文字的成員函式:
public synchronized void insert(String text, int position)
public synchronized void append(String text)
public synchronized void replaceRange(String text, int start, int end)
範例8-5:
import java.applet.*;
import java.awt.*;
public class TextAreaApplet extends Applet
{ TextArea input; public
void init () { this.input
= new TextArea("多行文字\n編輯盒",5,20); this.add(input);
// add the TextArea to the layout }
}
結果瀏覽:
Choice元件
產生一個選單需要下列步驟:
- 宣告
Choice物件
- 配置
Choice物件
- 將
選項逐一加入Choice
- 將
Choice物件加入 版面
- 將ItemListener加入
Choice物件
例如:
public void init()
{
Choice ch;
ch = new Choice();
ch.addItem("1");
ch.addItem("2");
ch.addItem("3");
ch.addItem("4");
ch.addItem("5");
add(ch);
}
Choice的成員函式
public int getItemCount()
public String getItem(int index)
public synchronized void add(String item)
public synchronized void addItem(String item)
public synchronized void insert(String item, int position)
public synchronized void remove(String item)
public synchronized void remove(int position)
public synchronized void removeAll()
有關存取Items內容的成員函式有:
public synchronized void removeAll()
public synchronized String getSelectedItem()
public synchronized Object[] getSelectedObjects()
public int getSelectedIndex()
public synchronized void select(int position)
public synchronized void select(String item)
範例6.5.6:
import java.awt.*; import java.applet.*;
public class ChoiceApplet extends Applet {
public void init() {
Choice ch; ch
= new Choice(); ch.addItem("電機系");
ch.addItem("電子系");
ch.addItem("資工系");
ch.addItem("資管系");
ch.addItem("醫工系");
this.add(ch); }
}
瀏覽結果:
Checkbox元件
Checkboxes 的使用範例:
Checkbox c;
c = new Checkbox("ABC"));
add(c);
每一個 Checkbox有一個boolean 變數,其值為 true或 false .
當 Checkbox被
checked,其值為 true,否則就是 false。我們可以使用 getState()和 setState(boolean b)成員方法來存取其值, 例:
private void handleCheckbox(Checkbox c)
{
if (c.getState()) price += 0.50f;
else price -= 0.50f;
}
範例8-7:
import java.applet.*; import
java.awt.*; public class CheckBoxApplet extends Applet {
TextField t; int count = 0; public
void init() { Checkbox
c; this.add(new Label("你的專長",
Label.CENTER)); this.t = new TextField(String.valueOf(count));
t.setEditable(false);
c = new Checkbox("晶片設計");
this.add(c); c
= new Checkbox("C++程式設計"); this.add(c);
c = new Checkbox("網路技術");
this.add(c); c
= new Checkbox("單晶片應用系統"); this.add(c);
c = new Checkbox("資料庫");
this.add(c); c
= new Checkbox("多媒體"); this.add(c);
c = new Checkbox("網頁設計");
this.add(c); c
= new Checkbox("機電整合"); this.add(c);
c = new Checkbox("打雜");
this.add(c); } }
結果瀏覽:
|