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上跑的时候才会创建。

猜你喜欢

转载自blog.csdn.net/tanjun592/article/details/54925718