java gui处理2D图形

老版的Graphics类就包含绘制直线、矩形和椭圆等方法,而且操作非常有限,如不能改变线的粗线,不能旋转这些图形。Java 2D库是一个功能强大的图形操作库。

要使用Java 2D库绘制图形,就需要获得一个Graphics2D类对象,它是Graphics类的子类。可以在paintComponent方法中强转获得一个Graphics2D的类对象:

public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D)g;
    ...
}

形状

Java2D采用面向对象的方式将几何图形组织起来。包含描述直线、矩形的椭圆的类:Line2D, Rectangle2D, Ellipse2D,这些类全部实现shape接口。 eg:

Rectangle2D floatRect = new Rectangle2D.Float(10.0f,25.0f,22.5f,20.0f);

Rectangle2D doubleRect= new Rectangle2D.Double(10.0f,25.0f,22.5f,20.0f);

Point2D p = new Point2D.Double(10,20);

Ellipse2D e = new Ellipse2D.Double(150,200,100,50);

设置矩形可以采用点设置的方式:

Rectangle2D = new Rectangle2D.Double();
rect.setFrameFromDiagonal(px,py,qx,qy);

也可以利用Point2D对象来设置:

rect.setFrameFromDiagonal(p,q);

颜色

使用Graphics2D类的setPaint方法可以为图形环境上的所有后续绘制操作选择颜色。eg:

g2.setPaint(Color.RED);
g2.drawString("Warning!",100,200);

将draw替换为fill可以用一种颜色填充一个封闭图形:

g2.fill(rect);

Color类用于定义颜色,JAVA中有13个预定义的常量,它们分别表示13种颜色:BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE, YELLOW。 也可以通过下面的函数获取:

Color(int redness, int greenness, int blueness)

Java在SystemColor类中预定义了很多颜色的名字,如:

p.setBackground(SystemColor.window);

Componet中可以设置背景和前景色:

MyComponent p = new MyComponent();
p.setBackground(Color.PINK);
p.setForeground(Color.WHITE);

Color中的brighter()和darker()方法可以设置加亮或变暗的效果:

Color c = new Color(123,123,123);
c.brighter().brighter().brighter();//多次调用达到耀眼的程度

字体

获取系统中的现有字体:

String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment()
                    .getAvailableFontFamilyNames();
for (String fontName : fontNames)
    System.out.println(fontName);

AWT定义了5个逻辑字体:SansSerif, Serif, Monospaced, Dialog, DialogInput。

Oracle JDK定义了3种字体: Lucida Sans, Lucida Bright, Lucida Sans Typewriter

Font sansbold14 = new Font("SansSerif", Font.BOLD, 14);
g2.setFont(sansbold14);
String message = "Hello world";
g2.drawString(message,75, 100);

//得到字体属性的描述对象
FontRenderContext context = g2.getFontRenderContext();
Rectangle2D bounds = f.getStringBounds(message,context);//得到包围字体的矩形框

图像的显示

Image img = new ImageIcon(filename).getImage();

public void paintComponent(Graphics g)
{
    g.drawImage(image, x, y, null);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值