javaGUI编程中JFrame对象调用的add()函数的作用及来源

//官方文档中创建框架的例子,个人感觉这里的框架其实就是一个窗口嘛
//1. Create the frame.
JFrame frame = new JFrame("FrameDemo");

//2. Optional: What happens when the frame closes?
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//3. Create components and put them in the frame.
//...create emptyLabel...
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
//看这里,这里出现了add()方法,这个方法我有点不懂,所以我去查了一下官方文档

//4. Size the frame.
frame.pack();

//5. Show it.
frame.setVisible(true);

JFrame官方文档函数总结
在函数列表中并未发现add()函数,只有一个addlmpl()函数,只好google一了一下add()函数,这时候在container类中发现了add()函数
container文档
原来container类是JFrame类的祖父类,所有JFame对象调用的add()函数是来自于它的父类,但是官方文档并不会把继承且未覆盖的类方法显示在该类的文档中,所有导致我并没有找到add()方法

add
public Component add(Component comp)
Appends the specified component to the end of this container. This is a convenience method for addImpl(java.awt.Component, java.lang.Object, int).
This method changes layout-related information, and therefore, invalidates the component hierarchy. If the container has already been displayed, the hierarchy must be validated thereafter in order to display the added component.

Parameters:
comp - the component to be added
Returns:
the component argument
Throws:
NullPointerException - if comp is null
See Also:
addImpl(java.awt.Component, java.lang.Object, int), invalidate(), validate(), JComponent.revalidate()

add()只是用来添加组件的函数

下面java核心技术中的一个例子:

package draw;
import java.ant.*;
import java.awt.geom.*;
import java.swing.*;

public class DrawTest {
    public static void main(String[] args)
    {
        eventQueue.invokeLate(new Runable()//所有的swing组件都必须由事件分派线程进行配置
            public void run()
            {
                JFrame frame=new DrawFrame(); //创建一个窗口对象,感觉java中的这个框架和窗口差不多
                frame.setTitle("Drawtest");//给窗口设置一个标题
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //
                frame.setvisible();//让窗口可见
            }
            )
    }
};
class DrawFrame extends JFrame
{
    public DrawFrame(){
    add(new DrawComponent());//component成分,组件,add()函数是用来添加组件的,而且add()函数是定义中container(容器)类中的函数,container类是JFrme类的祖父类
    //官方文档并不会把继承而且并未覆盖的方法显示在该类文档之中的
    pack();
    }

}
class DrawComponent extends JComponent//class不一定要有构造器
//绘制一个组件需要定义一个扩展于JCOMPONENT的类,并覆盖其中的paintComponent方法;
//想要绘制一个组件,组件类是必须的
{
    private static final int DEFAULT_WIDTH=400;
    private static final int DEFAULT_HEIGHT=400;
    public void paintComponent(Graphics g) 
    {

        Graphics2D g2=(Graphics2D) g;//强制类型转换
        double leftx=100;
        double topY=100;
        double width=200;
        double height=200;
        Rectangle2D rect=new Rectangle2D.Double(leftx,topY,width,height);
        //rectangle长方形,这里的Rectangle2D.Double是Rectangle类的内置类
        g2.draw(rect);//java中所有的绘图操作都必须有graphics对象进行操作;
        Ellipse2D ellipse=new Ellipse2D.double();
        ellipse.setFrame(rect)//创建一个椭圆
        g2.draw(ellipse);//将椭圆画出来
        g2.draw(new Line2D.double(leftx,topY,leftX+width,topY+height));
        double centerX=rect.getCenterX();
        double centerY=rect.getCenterY();
        double radius=150;
        Ellipse2D circle=new Ellipse2D.Double();
        circle.setFrameFromCenter(centerX,centerY,centerx+radius,centerY+radius);//创建一个圆形
        g2.draw(circle);//画一个圆
    }
    public Dimension getPerferredSize(){//dimesions外形
        return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值