Java(十四)--建立視窗,新增按鈕,接受事件
阿新 • • 發佈:2019-02-02
建立視窗的話需要引入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(),獲取物件的類名。