1. 程式人生 > >Java(十四)--建立視窗,新增按鈕,接受事件

Java(十四)--建立視窗,新增按鈕,接受事件

建立視窗的話需要引入javax.swing.*,使用了裡面的JFrame,如下

public static void main(String[] args){
  JFrame frame=new JFrame("Hello World");//括號中為視窗的名稱
  //設定視窗關閉的方式
  frame.setDefaultCloseOperation(JFrame.EXIT_IN_CLOSE);
  frame.setSize(300,100);//設定視窗大小
  frame.setVisible(true);//使視窗視覺化,不加這一句不會出現視窗
  }

這樣就可以建立一個視窗了。
下面學習標籤JLabel的新增
需要在JFrame的基礎上使用,同時再引入java.util.concurrent.*,同時要丟擲異常

public static void main(String[] args) throws Exception{
  JFrame frame=new JFrame("Hello World");//括號中為視窗的名稱
  //設定視窗關閉的方式
  frame.setDefaultCloseOperation(JFrame.EXIT_IN_CLOSE);
  frame.setSize(300,100);//設定視窗大小
  frame.setVisible(true);//使視窗視覺化,不加這一句不會出現視窗

  JLabel label=new JLabel("A Label");
  frame.add(label);
  TimeUnit.SECONDS.sleep(1
);//程式停止一秒 label.setText("This is different");//將label重置為新的字串 }

但是實際上我們不能像上面的程式碼這麼寫,會造成執行緒的衝突,所以我們要用到一個新的方法。如下

package com.kaihong;
import javax.swing.*;
import java.util.concurrent.TimeUnit;

public class TestSwing{

    JLabel label;
    JFrame frame;
    SwingConsole sc;
    public TestSwing
(){ frame=new JFrame("hello swing"); sc=new SwingConsole(); sc.run(frame,300,100); label=new JLabel("A Label"); frame.add(label); } static TestSwing ts; public static void main(String[] args) throws Exception { // TODO Auto-generated method stub /* * 使用SwingUtilities.invokeLater(new Runnable(){...})可以將Runnable提交, * 不會造成執行緒衝突 */ SwingUtilities.invokeLater(new Runnable(){ public void run(){ ts=new TestSwing(); } }); TimeUnit.SECONDS.sleep(1); SwingUtilities.invokeLater(new Runnable(){ public void run(){ ts.label.setText("Hey/This is different"); } }); } }

不再直接在main中操作視窗,而是提交一個Runnable,就插入到事件的佇列中。當執行到該Runnable時不會做其他東西。提交Runnable需要SwingUtilities.invokeLater()這個方法。
下面再講其他幾個方法。getSimpleName(),獲取物件的類名。