1. 程式人生 > >java畫圖總結之二(常用類Graphics,JFrame,JPanel)

java畫圖總結之二(常用類Graphics,JFrame,JPanel)

二,常用類 Graphics,JFrame,JPanel

   

    javax.swing.JFrame;

    javax.swing.JPanel;

------------------------------------------------------------------------------------------------------------- public class JPanel extends JComponent public abstract class JComponent extends Container
public class Container extends Component public class JFrame  extends Frame public class Frame extends Window implements MenuContainer public class Window extends Container 由以上宣告可以看出,多層的繼承關係。 JFrame  ---> Frame ---> Window--->Container--->Component;
JPanel  --->  JComponent ---> Container --->Component;

Swing的一些底層類是借用了AWT的Component、Container、Window等少數幾個基礎類。估計的原因是為了保持與AWT的相容,方便大家將程式碼移植到Swing上。

Swing是一個高層的GUI系統,而不像AWT那樣與執行平臺技術更加靠近的系統。Swing的類繼續關係比AWT要複雜的多,而且Swing類大多都經過了中間的轉接類-JComponent。而我們常用的JFrame則另闢蹊徑,從awt的window繼續了下來。
這種結構關係決定了Swing的龐大與複雜性。很多初學者都難以理解Swing的模式和結構。
   Swing 中的控制元件都是利用Java圖形功能繪製出來的,而不是對應到平臺的一個具體控制元件實現。我們所用的所有Swing控制元件都是直接或者間接用Graphics繪製出來的,這種實現方式最大的好處是很靈活,我們想要什麼樣的控制元件,就直接用Graphics繪製出來就是了。
Sun之所以用這種方式來實現,是為了在不犧牲移植性的基礎上加入豐富的介面互動功能。

但是缺點也很明顯:Swing的速度和效率是所有GUI(圖形使用者介面Graphical User Interface)系統中最慢的。

Graphics類是java提供的用於繪圖和顯示格式化文字的工具。繪圖必須在一個視窗(容器)中進行。


java.awt.Graphics;

   參考自:  http://wenku.baidu.com/link?url=uXdbhvny1uvjCuWhyD-28cfrVg8I65gq3LOEQCP2Dh2d7rsX-7sEBJwdU0HtCHCh__9XtkhSpBiAhkLVfPpuWfR1F00GQTyIaL1NQZYf_X3

http://blog.csdn.net/iamluole/article/details/8142257

-----------------------------------------------------------------------------------------------------------------------------------

    graphics是Java提供的用於繪圖和顯示格式化文字的工具。繪圖必須在一個視窗(容器)中進行

Container類是java.awt.Component類的子類,JComponent類又繼承自Container類。因此,JComponent類是AWT和Swing的聯絡之一。
除了Swing頂層容器類(top level containers)以外,其餘所有的Swing元件類都繼承自JComponent類(例如JPanel),如前所述,JComponent類是Container類的子類,因此,所有的Swing元件都可作為容器使用。
Swing頂層容器類包括了JFrame、JDialog、JApplet、JWindow,它們為其他的Swing元件提供了繪製自身的場所。

例如:

  1. JFrame frame = new JFrame();  
  2.         JPanel panel = new JPanel(); 
  3.           
  4.         panel.setLayout(new GridLayout());  
  5.         frame.add(panel);  

最後,graphics是一個抽象類,其實現大都是平臺相關的,所以不容易自己建立一個graphics例項。一般graphics的例項會由依照你所在的桌面環境給出。Graphics類及其子類Graphics2D提供的只是一些基本繪圖方法,比如畫直線、曲線什麼的。所以做一個圖形元件的基本思路可以總結為以下過程: 
選擇適合的基本圖形元件->繼承它->重寫paint等方法->在需要重新整理圖形的時候呼叫repaint等方法!
至於Graphics,先假設它存在,因為真正的Graphics例項只有當程式在jvm上跑的時候才會建立。