//官方文档中创建框架的例子,个人感觉这里的框架其实就是一个窗口嘛
//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);
在函数列表中并未发现add()函数,只有一个addlmpl()函数,只好google一了一下add()函数,这时候在container类中发现了add()函数
原来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);
}
}