java介面編程(2),java介面編程
本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020
上節建立了視窗,這是其他組件的容器,這節就來建立按鈕。
建立按鈕,只需要在希望出現的地方調用JButton的構造器即可。
JButton是一個組件,它有自己的小視窗,能作為整個更新過程的一部分而自動被重繪。也就是說,你不必顯示繪製一個按鈕或者別的類型的控制項,只要將其放在表單上,它們可以自動繪製自己。採用上節的例子,在其基礎上修改如下:
public class SwingTest extends JFrame{private static JLabel label;private static SwingTest st;private JButton b1;private JButton b2;public SwingTest() {super("Hello Swing");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 100);setVisible(true);//設定表單布局 setLayout(new FlowLayout());label = new JLabel("A Label");add(label);//添加按鈕b1 = new JButton("按鈕1");b2 = new JButton("按鈕2");add(b1);add(b2);}/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubst = new SwingTest();}});/*TimeUnit.SECONDS.sleep(1);SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {label.setText("Hi,this is a different");}});*/}} 這裡引入了一個布局管理器,在向JFrame添加任何組件之前,先給出一個新的FlowLayout類型的“布局管理器”。布局管理器是面板用來隱式的決定控制項在表單上的位置的工具。預設的是BoardLayout管理布局,每加入一個控制項,將完全覆蓋其他的控制項,所以這裡不適用。而FlowLayout使得控制項可以在表單上從左至右,從上到下連續的分布。效果如下:
有了按鈕,當然要有相應的事件才可以,所以我們下面為按鈕添加個單擊事件。
在添加單擊事件之前,先添加一個文本輸入框JTextField,接著,建立監聽按鈕單擊事件的類,最後就是將該監聽器綁定到按鈕上即可,這裡的事件是單擊按鈕,將按鈕的名稱顯示在文本輸入框中,完整代碼如下:
public class SwingTest extends JFrame{private static JLabel label;private static SwingTest st;private JButton b1;private JButton b2;private JTextField txt;public SwingTest() {super("Hello Swing");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 100);setVisible(true);//設定表單布局 setLayout(new FlowLayout());//添加標籤label = new JLabel("A Label");add(label);//添加文本輸入框txt = new JTextField(10);add(txt);//添加按鈕b1 = new JButton("按鈕1");b2 = new JButton("按鈕2");add(b1);add(b2);//添加事件b1.addActionListener(new ButtonListener());b2.addActionListener(new ButtonListener());}/** * @param args * @throws InterruptedException */public static void main(String[] args) throws InterruptedException {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubst = new SwingTest();}});/*TimeUnit.SECONDS.sleep(1);SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {label.setText("Hi,this is a different");}});*/}class ButtonListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent event) {// TODO Auto-generated method stub//將按鈕的名稱顯示在TextField中txt.setText(((JButton)event.getSource()).getText());}}} 效果如:
這樣,就為按鈕添加了單擊事件,點擊按鈕,觸發相應的事件,將其名稱顯示在文本輸入框中。同樣,可以將事件監聽器寫成其名內部類,這樣會更方便,即可以寫成:
private ActionListener bl = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent event) {// TODO Auto-generated method stubtxt.setText(((JButton)event.getSource()).getText());}};
這裡的JTextField只能輸入單行文本,而文本地區JTextArea可以輸入多行文本以及更多的功能,而且還有一個比較常用的方法就是append(),在SwingTest() 方法中增加:
//添加文本地區txa = new JTextArea(5,10);add(txa);
即可建立一個5行10列的文本地區,為了體現append()方法,我們增加兩個按鈕,點擊其中一個增加一行文本,點擊另一個清除所有文本,添加如下代碼:
//添加按鈕b1 = new JButton("add data");b2 = new JButton("clear data");add(b1);add(b2);b1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubtxa.append("this is JText Area\n");}});b2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubtxa.setText("");}}); 效果如下:
可以看出,文本地區可以輸入多行文本,當然,也有其他的功能。