標簽准確地運作:安放一個標簽到窗體上。這對沒有標簽的TextFields和Text areas 來說非常的重要,如果我們簡單地想安放文字的信息在窗體上也能同樣的使用。我們能像本章中第一個例程中演示的那樣,使用drawString()裡邊的paint()在確定的位置去安置一個文字。當我們使用的標簽允許我們通過布局管理加入其它的文字組件。(在這章的後面我們將進入討論。)
使用構建器我們能創建一條包括初始化文字的標簽(這是我們典型的作法),一個標簽包括一行CENTER(中間)、LEFT(左)和RIGHT(右)(靜態的結果取整定義在類標簽裡)。如果我們忘記了可以用getText()和getalignment()讀取值,我們同樣可以用setText()和setAlignment()來改變和調整。下面的例子將演示標簽的特點:
//: Label1.java // Using labels import java.awt.*; import java.applet.*; public class Label1 extends Applet { TextField t1 = new TextField("t1", 10); Label labl1 = new Label("TextField t1"); Label labl2 = new Label(" "); Label labl3 = new Label(" ", Label.RIGHT); Button b1 = new Button("Test 1"); Button b2 = new Button("Test 2"); public void init() { add(labl1); add(t1); add(b1); add(labl2); add(b2); add(labl3); } public boolean action (Event evt, Object arg) { if(evt.target.equals(b1)) labl2.setText("Text set into Label"); else if(evt.target.equals(b2)) { if(labl3.getText().trim().length() == 0) labl3.setText("labl3"); if(labl3.getAlignment() == Label.LEFT) labl3.setAlignment(Label.CENTER); else if(labl3.getAlignment()==Label.CENTER) labl3.setAlignment(Label.RIGHT); else if(labl3.getAlignment() == Label.RIGHT) labl3.setAlignment(Label.LEFT); } else return super.action(evt, arg); return true; } } ///:~
首先是標簽的最典型的用途:標記一個文本字段或文本區域。在例程的第二部分,當我們按下“test 1”按鈕通過setText()將一串空的空格插入到的字段裡。因為空的空格數不等於同樣的字符數(在一個等比例間隔的字庫裡),當插入文字到標簽裡時我們會看到文字將被省略掉。在例子的第三部分保留的空的空格在我們第一次按下“test 2”會發現標簽是空的(trim()刪除了每個字符串結尾部分的空格)並且在開頭的左列插入了一個短的標簽。在工作的其余時間中我們按下按鈕進行調整,因此就能看到效果。
我們可能會認為我們可以創建一個空的標簽,然後用setText()安放文字在裡面。然而我們不能在一個空標簽內加入文字-這大概是因為空標簽沒有寬度-所以創建一個沒有文字的空標簽是沒有用處的。在上面的例子裡,“blank”標簽裡充滿空的空格,所以它足夠容納後面加入的文字。
同樣的,setAlignment()在我們用構建器創建的典型的文字標簽上沒有作用。這個標簽的寬度就是文字的寬度,所以不能對它進行任何的調整。但是,如果我們啟動一個長標簽,然後把它變成短的,我們就可以看到調整的效果。
這些導致事件連同它們最小化的尺寸被擠壓的狀況被程序片使用的默認布局管理器所發現。有關布局管理器的部分包含在本章的後面。