JLabel label=new JLabel("標籤") ;
或者先呼叫無參數之建構子,再呼叫 setText(String text) 方法設定顯示文字:
JLabel label=new JLabel();
label.setText("標籤");
也可以傳入水平對齊方式常數作為第二參數:
JLabel label=new JLabel("標籤", SwingConstants.RIGHT);
水平對齊方式常數有三個:
SwingConstants.LEFT(預設= 2), SwingConstants.CENTER(= 0), SwingConstants.RIGHT(= 4)
如下範例 1 所示:
測試範例1 : http://mybidrobot.allalla.com/javatest/JLabel1.zip [ 看原始碼]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class JLabel1 {
JFrame f;
public static void main(String argv[]) {
new JLabel1();
}
public JLabel1() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
f=new JFrame("JLabel1");
f.setSize(300,200);
f.setLocationRelativeTo(null);
f.setVisible(true);
Container cp=f.getContentPane();
cp.setLayout(null);
JLabel label1=new JLabel("標籤 1");
label1.setBounds(20,20,100,40);
cp.add(label1);
JLabel label2=new JLabel();
label2.setText("標籤 2");
label2.setBounds(20,50,100,40);
cp.add(label2);
JLabel label3=new JLabel("標籤 3",SwingConstants.RIGHT);
label3.setBounds(20,80,100,40);
cp.add(label3);
JLabel label4=new JLabel("標籤 4",SwingConstants.CENTER);
label4.setBounds(20,110,100,40);
cp.add(label4);
f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int result=JOptionPane.showConfirmDialog(f,
"確定要結束程式嗎?",
"確認訊息",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (result==JOptionPane.YES_OPTION) {System.exit(0);}
}
});
}
}
除了文字之外,JLabel的也可以使用圖片,這要在呼叫建構子時,傳入 ImageIcon 物件:
ImageIcon icon=new ImageIcon("icon.jpg");
JLabel label=new JLabel(icon);
也可以先呼叫無參數建構子,再呼叫 SetIcon() 方法傳入 IconImage 物件:
JLabel label =new JLabel();
label.setIcon(new IconImage("icon.jpg"));
或者呼叫有水平對齊參數之建構子:
JLabel label =new JLabel(icon, SwingConstants.RIGHT);
如下面範例 2 所示:
測試範例 2 : http://mybidrobot.allalla.com/javatest/JLabel2.zip [ 看原始碼]
ImageIcon的圖標=新的ImageIcon(“icon.jpg”) ;
JLabel的標籤1 =新JLabel的(圖標) ; / /預設圖片置中對齊
label1.setBounds(20,20,100,50);
label1.setToolTipText(“標籤1”);
cp.add項(Label);
JLabel的標記2 =新的JLabel(); / /無參數建構子,預設向左對齊
label2.setBounds(20,70,100,50);
LABEL2。操作SetIcon(圖標); / /設定圖片
label2.setToolTipText(“標籤2”);
cp.add(標記2);
JLabel的LABEL3 =新JLabel的(圖標,SwingConstants.RIGHT) ; / /指定圖片向右對齊
label3.setBounds(20,120,100,50);
label3.setIcon(圖標);
LABEL3。的setToolTipText(“標籤3”) ;
cp.add(LABEL3);
JLabel的還有一個建構子可以同時指定文字與圖片,預設圖片在左,文字在右:
JLabel的標籤=新的JLabel(“標籤”圖標,SwingConstants.RIGHT);
測試範例3 : http://mybidrobot.allalla.com/javatest/JLabel3.zip [ 看原始碼]
ImageIcon的圖標=新的ImageIcon(“icon.jpg”);
JLabel的標籤1 =新的JLabel(“標籤1”,圖標,SwingConstants.LEFT); / /整體向左對齊
label1.setBounds(20,20,100,50);
cp.add項(Label);
JLabel的標記2 =新的JLabel(“標籤2”,圖標,SwingConstants.RIGHT); / /整體向右對齊
label2.setBounds(20,80,100,50);
cp.add(標記2);
JLabel的LABEL3 =新的JLabel(“標籤3”,圖標,SwingConstants.CENTER); / /整體置中對齊
label3.setBounds(20,140,100,50);
cp.add(LABEL3);
JLabel的Label4的=新的JLabel(“標籤4”,圖標,SwingConstants.CENTER); / /整體置中對齊
Label4的。setHorizontalTextPosition(SwingConstants.LEFT); / /文字在圖左(預設為右)
label4.setBounds(20,200,100,50);
cp.add(Label4的);
JLabel的label5 =新的JLabel(“標籤5”,圖標,SwingConstants.RIGHT); / /整體向右對齊
。label5 setVerticalTextPosition(SwingConstants.TOP) ; / /文字垂直向上
label5.setBounds(200,20,100,50);
cp.add(label5);
JLabel的label6 =新的JLabel(“標籤6”圖標,SwingConstants.RIGHT); / /整體向右對齊
label6.setVerticalTextPosition(SwingConstants.CENTER); / /文字垂直置中
label6.setBounds(200,80,100,50);
cp.add(label6);
JLabel的label7 =新的JLabel(“標籤7”,圖標,SwingConstants.RIGHT); / /整體向右對齊
label7.setVerticalTextPosition(SwingConstants.BOTTOM); / /文字垂直向下
label7.setBounds(200,140,100,50);
cp.add(label7);
此例中可見建構子的第三參數是指文字與圖片的整體對齊方式,兩者擺放方式預設是圖先字後,如果要改變為文先圖後,必須呼叫setHorizontalTextPosition()方法,傳入SwingConstants.LEFT即可。文字的垂直位置則可以呼叫setVerticalTextPosition()來設定,如標籤5,6,7所示。
以上為JLabel的常用方式。要注意單獨圖片與文字的水平尺位置預設什麼。不同的,文字是靠左,圖片是置中,文圖一起出現時預設是圖先文後,垂直位置均為置中。
接著來看文字欄位的JTextField,此元件用來輸入單行文字,其建構子為:
JTextField的文本=新的JTextField(); / /預設為欄位數為0
也可以傳入欄位數(列),指定可輸入的文字寬度,但實際顯示寬度是平均字元寬度(像素)乘以欄位數,但這只有在有版面管理員時才有效果,若自行排版則受到尺寸限制,:
JTextField的文本=新的JTextField(12); / /指定12欄
可以指定預設文字:
JTextField的文本=新的JTextField(“請輸入帳號”);
或同時指定欄位與預設文字:
JTextField的文本=新的JTextField(“請輸入帳號”,12);
如下列範例4所示:
測試範例4 : http://mybidrobot.allalla.com/javatest/JTextField1.zip [ 看原始碼]
導入java.awt中的*。;
進口java.awt.event中*。;
進口javax.swing中*。;
進口javax.swing.event中的*。;
公共類JTextField1 {
JFrame的F;
公共靜態無效的主要(字串的argv []){
新JTextField1();
}
公共JTextField1(){
JFrame.setDefaultLookAndFeelDecorated(真);
JDialog.setDefaultLookAndFeelDecorated(真);
F =新的JFrame(“JTextField1”);
f.setSize(400,300);
f.setLocationRelativeTo(NULL);
集裝箱CP = f.getContentPane();
cp.setLayout(NULL);
JTextField的文本1 =新的JTextField(5);
text1.setBounds(20,20,100,25);
cp.add(文本);
JTextField的文本2 =新的JTextField(15);
text2.setBounds(20,60,100,25);
cp.add(文本2);
JTextField的文本3 =新的JTextField(“請輸入帳號”);
text3.setBounds(20,100,100,25);
cp.add(文本3);
JTextField的文本4 =新的JTextField(“請輸入密碼”,100);
text4.setBounds(20,140,100,25);
cp.add(文字4);
f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
f.setVisible(真);
f.addWindowListener(新WindowAdapter(){
公共無效windowClosing(WindowEvent E){
int結果= JOptionPane.showConfirmDialog(F,
“確定要結束程式嗎?”
“確認訊息”,
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
如果(結果== JOptionPane.YES_OPTION){System.exit(0);}
}
});
}
}
可見自行排版時,欄位設定是沒有作用的。若設定版面管理員就會不同了,如下列範例5所示:
測試範例5 : http://mybidrobot.allalla.com/javatest/JTextField2.zip [ 看原始碼]
導入java.awt中的*。;
進口java.awt.event中*。;
進口javax.swing中*。;
進口javax.swing.event中的*。;
公共類jTextField2中{
JFrame的F;
公共靜態無效的主要(字串的argv []){
新jTextField2中();
}
公共jTextField2中(){
JFrame.setDefaultLookAndFeelDecorated(真);
JDialog.setDefaultLookAndFeelDecorated(真);
F =新的JFrame(“jTextField2中”);
f.setSize(400,300);
f.setLocationRelativeTo(NULL);
集裝箱CP = f.getContentPane();
cp.setLayout(新的FlowLayout());
JTextField的文本1 =新的JTextField(5);
cp.add(文本);
JTextField的文本2 =新的JTextField(15);
cp.add(文本2);
JTextField的文本3 =新的JTextField(“請輸入帳號”);
cp.add(文本3);
JTextField的文本4 =新的JTextField(“請輸入密碼”,20);
cp.add(文字4);
f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
f.setVisible(真);
f.addWindowListener(新WindowAdapter(){
公共無效windowClosing(WindowEvent E){
int結果= JOptionPane.showConfirmDialog(F,
“確定要結束程式嗎?”
“確認訊息”,
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
如果(結果== JOptionPane.YES_OPTION){System.exit(0);}
}
});
}
}
可見在的FlowLayout版面管理員下,欄位設定就有作用了。但在網格佈局下也沒有作用,因為它會把元件撐大到JFrame中之邊界,如下列範例6
測試範例6 : http://mybidrobot.allalla.com/javatest/JTextField3.zip [ 看原始碼]
集裝箱CP = f.getContentPane();
cp.setLayout(新GridLayout的(0,1));
JTextField的文本1 =新的JTextField(5);
cp.add(文本);
JTextField的文本2 =新的JTextField(15);
cp.add(文本2);
JTextField的文本3 =新的JTextField(“請輸入帳號”);
cp.add(文本3);
JTextField的文本4 =新的JTextField(“請輸入密碼”,20);
cp.add(文字4);
測試範例7 : http://mybidrobot.allalla.com/javatest/JTextField4.zip [ 看原始碼]
集裝箱CP = f.getContentPane();
/ / cp.setLayout(新的BorderLayout()); / /預設即為邊界佈局,不必特別設定
JTextField的文本1 =新的JTextField(5);
cp.add(文字,BorderLayout.EAST);
JTextField的文本2 =新的JTextField(15);
cp.add(文字2,BorderLayout.WEST);
JTextField的文本3 =新的JTextField(“請輸入帳號”);
cp.add(文本3,BorderLayout.SOUTH);
JTextField的文本4 =新的JTextField(“請輸入密碼”,20);
cp.add(文本4,BorderLayout.NORTH);
可見邊界佈局下,視窗開啟後,南北方向會撐到視窗寬度,東西方向會則依欄位大小分配。不過視窗縮放後高度會縮到JTextField中的預設高度:
JTextField中有兩個常用的方法的getText()與的setText(字符串文本),可用來存取使用者所輸入之內容,如下列範例8所示:
測試範例8 : http://mybidrobot.allalla.com/javatest/JTextField5.zip [ 看原始碼]
導入java.awt中的*。;
進口java.awt.event中*。;
進口javax.swing中*。;
進口javax.swing.event中的*。;
公共類JTextField5 實現的ActionListener {
JFrame的F;
JTextField的文本1;
JButton的B1,B2;
公共靜態無效的主要(字串的argv []){
新JTextField5();
}
公共JTextField5(){
JFrame.setDefaultLookAndFeelDecorated(真);
JDialog.setDefaultLookAndFeelDecorated(真);
F =新的JFrame(“JTextField5”);
f.setSize(400,300);
f.setLocationRelativeTo(NULL);
集裝箱CP = f.getContentPane();
cp.setLayout(NULL);
文本1 =新的JTextField(“請輸入帳號”);
text1.setBounds(20,20,100,25);
cp.add(文本);
B1 =新的JButton(“清除”);
b1.setBounds(140,20,80,25);
b1.addActionListener(本);
cp.add(B1);
B2 =新的JButton(“確定”);
b2.setBounds(230,20,80,25);
b2.addActionListener(本);
cp.add(B2);
f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
f.setVisible(真);
f.addWindowListener(新WindowAdapter(){
公共無效windowClosing(WindowEvent E){
int結果= JOptionPane.showConfirmDialog(F,
“確定要結束程式嗎?”
“確認訊息”,
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
如果(結果== JOptionPane.YES_OPTION){System.exit(0);}
}
});
}
公共無效的actionPerformed(ActionEvent的E) {
如果(e.getSource()== b1)的{
。文本1 的setText(“”) ;
}
否則,如果(e.getSource()== b2)的{
JOptionPane.showMessageDialog(F,
“您的帳號是”+ 文本1。的getText(),
“訊息”,JOptionPane.INFORMATION_MESSAGE);
}
}
}
此例中我們放置了兩個按鈕B1與B2,並實作的ActionListener介面。因為要在的actionPerformed()方法中存取文字欄位的text1,因此這三個元件必須宣告為類別成員。按下“清除”鍵會呼叫的setText(“”)方法清除欄位中的值,而按下“確定”則呼叫的getText()方法取得其值。
下面範例9要測試的JTextField從JComponent的類別繼承而來的另外三個常用方法:切(),複製,粘貼與():
測試範例9 : http://mybidrobot.allalla.com/javatest/JTextField6.zip [ 看原始碼]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class JTextField6 implements ActionListener {
JFrame f;
JTextField text1,text2;
JButton cut, copy, paste;
public static void main(String argv[]) {
new JTextField6();
}
public JTextField6() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
f=new JFrame("JTextField6");
f.setSize(400,300);
f.setLocationRelativeTo(null);
Container cp=f.getContentPane();
cp.setLayout(null);
text1=new JTextField();
text1.setBounds(20,20,200,25);
cp.add(text1);
cut=new JButton("剪下");
cut.setBounds(20,70,60,25);
cut.addActionListener(this);
cp.add(cut);
copy=new JButton("複製");
copy.setBounds(90,70,60,25);
copy.addActionListener(this);
cp.add(copy);
paste=new JButton("貼上");
paste.setBounds(160,70,60,25);
paste.addActionListener(this);
cp.add(paste);
text2=new JTextField();
text2.setBounds(20,120,200,25);
cp.add(text2);
f.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int result=JOptionPane.showConfirmDialog(f,
"確定要結束程式嗎?",
"確認訊息",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE);
if (result==JOptionPane.YES_OPTION) {System.exit(0);}
}
});
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==cut) {text1.cut();}
else if (e.getSource()==copy) {text1.copy();}
else if (e.getSource()==paste) {text2.paste();}
}
}
此例中我們放置了兩個JTextField的:文本1與文本2,前者用來輸入資料以便剪下或複製,後者用來貼上剪下或複製之資料。當以滑鼠選擇部份文字,按剪下鈕時,該子字串會被移到剪貼簿,按下貼上鈕就會出現在下方的文本2文字欄位上,但按下複製鈕時,上方子字串仍在那裡,只是被複製一份到剪貼簿,按貼上就出現在下方欄位上。
以上便是JTextField的常用方法。JPassword跟JTextField的是類似的元件,都是單行文字欄位,差別是JPassword輸入時欄位上是顯示指定的字元(預設是黑色圓點),以保護密碼不被周遭的人偷看(其實?看鍵盤不就一樣會洩漏),如下列範例10所示:
測試範例10 : http://mybidrobot.allalla.com/javatest/JPasswordField1.zip [ 看原始碼]
沒有留言 :
張貼留言