JavaSwing控件的屬性配置和優勢
最近學習了有關JavaGUI的相關的知識,個人感覺和Android控件的設置有點類似,可以設置佈局,填充數據,以及設置監聽事件等等,面對新的API,想通過近期的幾篇博客把遇到的問題,和有關JavaGUI新鮮的地方總結下來,和大家共同分享自己的想法和編程的樂趣。
JComponent與AWT的繼承關係
在有關JavaGUI的繼承關係中有這樣的一個原則那就是控件在前容器在後,也就是說容器是作爲控件的子類存在的,有關JComponent的繼承關係大概是這樣的:
java.lang.Object>>java.awt.Component>>java.awt.Container>>javax.swing.JComponent。
熟悉繼承關係能進一步的瞭解各個類之間的關係,同時也方便自己對各個類內部方法調用的理解和認識。
JFrame.getContentPane()自帶容器
這個方法返回的是一個JFrame的容器,和其他的容器一樣,該容器一樣可以進行添加控件設置背景色等操作,不同的是由於是從JFrame中直接拿到的容器所以不需要將該容器往JFrame中進行添加。進行簡單的設置和添加控件之後我們就可以按照JFrame的常用步驟進行相關的操作就可以了:
class TestJFrame{
public static void main(){
JFrame jf=new JFrame("TestJFrame");
Container ct=jf.getContentPane();
ct.setlayout(new FlowLayout(FlowLayout.LEFT,20,20));
JLable hello=new JLabel("你好!");
JLabel bye=new JLable("再見");
hello.setOpaque(true);
hello.setBackground(Color.RED);
ct.add(hello);
ct.add(bye);
ct.setBackground(Color.BLUE);
jf.setSize(300,200);
jf.setLocation(10,10);
jf.addWindowListener(new WindowAdapter(){
@override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
有關AWT.Label中的亂碼問題
在使用Label的時候如果我們使用的AWT中的Label控件的話,如果我們在改控件中添加了文字在運行之後就會出現亂碼的問題,解決的方案是一方面我們可以在RunConfigurations中設置,另外一個方面就是直接棄用Label而是選擇使用Swing下的JLabel,這樣的話如果在項目的編碼方式中我們選用的是UTF-8那麼亂碼現象就會消失。
JFrame的兩種窗口關閉方式
JFrame窗口的關閉方式目前學到的主要有兩種一種是通過調用addWindowListener()方法來實現,另外一種方式就是通過直接調用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)達到關閉窗口的目的。具體編碼如下:
public static void main(){
JFrame jf=new JFrame("TestClose");
//實現方式一
jf.addWindowListener(new WindowAdapter(){
@override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//實現方式二
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
總結:
有關JFrame的使用要注意的就是一方面是他自帶容器的利用,這個容器無需添加,另外一個方面就是常見的配置流程:在創建對象的時候傳入字符串,添加控件,設置大小以及Location,設置窗口的關閉方式,最後通過調用JFram.setVisible(ture)實現Frame的顯示。