java 数据 绘图_java 绘图简介

要想在JFrame中绘图,必须构造一个组件对象并把它加到框架中,swing中JComponent类表示空组件。

public abstract class JComponentextends Container

该类是除顶层容器外所有 Swing 组件的基类。要使用继承自JComponent的组件,必须将该组件置于一个根为顶层 Swing 容器的包含层次结构(containment hierarchy)中。顶层 Swing 容器(如JFrame、JDialog和JApplet)是专门的组件,它们为其他 Swing 组件提供了绘制其自身的场所。有关包含层次结构的解释,请参阅《The Java Tutorial》中的Swing Components and the Containment Hierarchy一节。

With the exception of top-level containers, all Swing components whose names begin with "J" descend from theJComponentclass. For example,JPanel,JScrollPane,JButton, andJTableall inherit fromJComponent. However,JFrameandJDialogdon't because they implement top-level containers.处了顶层容器外,其他所有swing组件都是由JComponent类衍生而来.

定义一个JComponent的子类:

public class RectangleComponent extendsJComponent{public voidpaintComponent(Graphics g)

{

此处是绘图指令

}

}

将绘图指令放在paintComponent方法中,如果需要重新绘制组件,就调用该方法。

当第一次显示窗口,自动调用paintComponent方法,在调整窗口大小或窗口隐藏后再次显示时,也调用该方法。

该方法接受一个Graphics对象,保存图形状态:当前色彩,字体等用于绘图操作的数据。但graphics是基本类,当程序员强烈要求提供更加面向对象的绘图方法时,java的设计者就创建了扩展Graphics类的Graphics2D类。只要swing工具箱调用paintComponent方法,实际上就是传递一个Graphics2D类型的参数。绘制简单图形不需要此特性。因为想用更复杂的方法 绘制二维图形对象,所以要Graphics参数恢复为Graphics2D类型,这需要强制转换。

public voidpaintComponent(Graphics g)

Graphics2D g2=(Graphics2D)g; //恢复为Graphics2d

graphics2d 重要的方法draw()

Strokes the outline of aShapeusing the settings of the currentGraphics2Dcontext.

public class RectangleComponent extendsJComponent{public voidpaintComponent(Graphics g)

{

Graphics2D g2=(Graphics2D) g;

Rectangle box=new Rectangle(5,10,20,30);

g2.draw(box);

}

}

packagejcomponent;importjava.awt.Rectangle;importjavax.swing.JFrame;public classFrameViewer {public static voidmain(String[] args)

{final int FRAME_WIDTH=300;final int FRAME_HEIGHT=400;

JFrame jframe=newJFrame();

jframe.setSize(FRAME_WIDTH,FRAME_HEIGHT);

jframe.setTitle("frame");

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

RectangleComponent component=newRectangleComponent();

jframe.add(component);

jframe.setVisible(true);

}

}

如果上面的程序要写成applet,要继承一个JApplet类

将绘图代码放在paint方法中,而不是paintComponent中。

写成applet程序,代码如下:

public class RectangleApplet extendsJApplet{public voidpaint(Graphics g)

{

Graphics2D g2=(Graphics2D) g;

g2.setColor(Color.red);

Rectangle box=new Rectangle(5,10,20,30);

g2.draw(box);

box.translate(15,25);

g2.draw(box);

}

}

为运行applet,需要一个带有applet标签的html文件。

RectangleApplet.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值