前面介紹了AWT視窗及其面闆的簡單用法,其中展示出來的控件隻有按鈕一種,還有很多好用好玩的控件有待介紹。首先是文本标簽Label,該控件用于顯示一段平鋪文本,它不花哨也不跳動,完全就是素面朝天的文本字元。不過,即便是文本,也能擁有鮮明的個性,猶如書法那樣,可以橫排也可以豎排,既可寫在白紙上也可寫在紅紙上,還能以專門的字型來書寫如楷書、行書、草書、隸書等等。這些彰顯個性的功能,需要調用文本标簽的相應方法來實作,下面是Label的常見方法說明:
setText:設定文本内容。
setAlignment:設定内部文本的對齊方式。Label.CENTER表示居中對齊,Label.LEFT表示向左對齊,Label.RIGHT表示向右對齊。
setPreferredSize:設定文本标簽的推薦寬高。
setBackground:設定文本标簽的背景顔色。
setForeground:設定文本标簽的前景顔色,其實就是文字顔色。
setFont:設定文本的字型(包括樣式與大小)。
這裡需要補充描述一下AWT的顔色與字型用法,不光是标簽Label,還有很多控件會用到顔色和字型。顔色用到了Color工具,并且Color類自帶了幾種顔色常量,包括白色Color.WHITE、灰色Color.GRAY、黑色Color.BLACK、紅色Color.RED、粉紅Color.PINK、橙色Color.ORANGE、黃色Color.YELLOW、綠色Color.GREEN、玫紅Color.MAGENTA、青色Color.CYAN、藍色Color.BLUE等。可是彩虹的七種顔色——赤橙黃綠青藍紫,AWT居然沒提供紫色的顔色常量,隻好由程式員自己來計算紫色了。在計算機行業标準中,顯示裝置普遍采用RGB顔色模式,也就是以紅、綠、藍為三原色,三原色各取若幹疊加起來,便形成萬紫千紅的花花世界。不料AWT的Color工具卻采取另一種HSB色彩模式,這樣還得先将大衆熟知的RGB色值轉換為HSB色值才行,轉換過程調用的是RGBtoHSB方法,然後再調用getHSBColor方法根據HSB色值獲得顔色執行個體。從RGB色值到最終可用的顔色執行個體,完整的轉換代碼如下所示:
// 使用RGB數值獲得AWT的顔色執行個體
private static Color getColor(int red, int green, int blue) {
// 把RGB色值轉換為HSB色值數組
float[] hsbs = Color.RGBtoHSB(red, green, blue, null);
// 利用HSB色值獲得AWT的顔色執行個體
Color color = Color.getHSBColor(hsbs[0], hsbs[1], hsbs[2]);
return color;
}
如此一來,給新定義的getColor方法填入具體的RGB數值,即可得到五顔六色的Color對象了。譬如紫光由紅光與藍光混合而成,那麼隻需下面一行代碼就能獲得紫光的顔色執行個體了:
Color purple = getColor(255, 0, 255); // 紅光與藍光混合就變成了紫光
至于字型則用到了Font工具,它決定了文字的形狀和大小,調用Font的構造方法之時,第二個參數表示文字的書寫字型,包括預設的普通體Font.PLAIN、斜體Font.ITALIC、粗體Font.BOLD;第二個參數表示文字的大小,預設值為12,數值越大文字也越大。比如以下代碼就分别建立了大号斜體與中号粗體共兩種字型對象:
// 建立一個30号大小且為斜體的字型對象
Font italic_big = new Font("大号斜體", Font.ITALIC, 30);
// 建立一個20号大小且為粗體的字型對象
Font bold_middle = new Font("中号粗體", Font.BOLD, 20);
接下來通過文本标簽的相關方法,看看實際的界面展示效果。先在視窗的中間位置添加文本标簽,準備通過該控件觀察Label的文字變化效果,往面闆添加标簽的代碼示例如下:
Label label = new Label("這裡檢視文字效果"); // 建立一個文本标簽
label.setAlignment(Label.CENTER); // 設定文本标簽的對齊方式
label.setPreferredSize(new Dimension(300, 50)); // 設定文本标簽的推薦寬高
Panel panelCenter = new Panel(); // 建立中央面闆
panelCenter.add(label); // 在中央面闆上添加文本标簽
frame.add(panelCenter, BorderLayout.CENTER); // 把中央面闆添加到視窗的中間位置
然後看給标簽設定背景色的例子,下面代碼調用了文本标簽的setBackground方法:
Panel panelTop = new Panel(); // 建立頂部面闆
Button btn1 = new Button("背景黃色"); // 建立一個按鈕
btn1.addActionListener(new ActionListener() { // 給按鈕注冊點選監聽器
public void actionPerformed(ActionEvent e) { // 發生了單擊事件
label.setBackground(Color.YELLOW); // 設定文本标簽的背景顔色
}
});
panelTop.add(btn1); // 在頂部面闆上添加按鈕
運作以上的背景色設定代碼,單擊按鈕後的視窗界面如下圖所示,可見标簽區域的背景顔色變為黃色。
再來看設定前景色的例子,下面代碼調用了文本标簽的setForeground方法:
Button btn2 = new Button("前景紅色"); // 建立一個按鈕
btn2.addActionListener(new ActionListener() { // 給按鈕注冊點選監聽器
public void actionPerformed(ActionEvent e) { // 發生了單擊事件
label.setForeground(Color.RED); // 設定文本标簽的前景顔色(即文字顔色)
}
});
panelTop.add(btn2); // 在頂部面闆上添加按鈕
運作以上的前景色設定代碼,單擊按鈕後的視窗界面如下圖所示,可見标簽内部的文本顔色變為紅色。
抛開AWT自帶的幾種顔色,程式員自己定義紫色執行個體,并将文本标簽的背景色設定為紫色,此時的調用代碼如下所示:
Button btn3 = new Button("背景紫色"); // 建立一個按鈕
btn3.addActionListener(new ActionListener() { // 給按鈕注冊點選監聽器
public void actionPerformed(ActionEvent e) { // 發生了單擊事件
Color purple = getColor(255, 0, 255); // 紅光與藍光混合就變成了紫光
label.setBackground(purple); // 把标簽背景設定為紫色
}
});
panelTop.add(btn3); // 在頂部面闆上添加按鈕
運作以上的背景色設定代碼,單擊按鈕後的視窗界面如下圖所示,可見标簽區域的背景顔色變為紫色。
接着給标簽文本設定大号斜體,利用setFont方法設定字型的代碼示例如下:
Button btn4 = new Button("大号斜體"); // 建立一個按鈕
btn4.addActionListener(new ActionListener() { // 給按鈕注冊點選監聽器
public void actionPerformed(ActionEvent e) { // 發生了單擊事件
// 建立一個30号大小且為斜體的字型對象
Font italic_big = new Font("大号斜體", Font.ITALIC, 30);
label.setFont(italic_big); // 設定文本标簽的字型及大小
}
});
panelTop.add(btn4); // 在頂部面闆上添加按鈕
運作上面的字型設定代碼,單擊按鈕後的視窗界面如下圖所示,可見标簽文本變為斜體,同時文字也變大了不少。
最後給标簽文本設定中号粗體,利用setFont方法設定字型的代碼示例如下:
Button btn5 = new Button("中号粗體"); // 建立一個按鈕
btn5.addActionListener(new ActionListener() { // 給按鈕注冊點選監聽器
public void actionPerformed(ActionEvent e) { // 發生了單擊事件
// 建立一個20号大小且為粗體的字型對象
Font bold_middle = new Font("中号粗體", Font.BOLD, 20);
label.setFont(bold_middle); // 設定文本标簽的字型及大小
}
});
panelTop.add(btn5); // 在頂部面闆上添加按鈕
運作上面的字型設定代碼,單擊按鈕後的視窗界面如下圖所示,可見标簽文本變為粗體,同時文字也變大了一些。
另外,setBackground、setForeground、setFont這三個方法不單單為标簽Label所用,按鈕Button也能調用它們,舉凡帶文字的控件,都支援通過這三個方法來設定背景色、前景色與字型。
更多Java技術文章參見《Java開發筆記(序)章節目錄》