zoukankan      html  css  js  c++  java
  • Java学习笔记(三)Java2D组件

    一  概述

        Java2D的一切都基于java.awt包中的Graphics2D类,它是Graphics的子类。

        为了绘制图形,需要使用面板作为画布,例如使用JPanel作为画布,面板有一个paintCompnent()方法,每当窗口发生变化时,便会调用。该方法接收的对象是Graphics对象,要在方法内将其转化为Graphics2D再使用,一般用法为: 

    public void paintComponent(Graphics comp){
        Graphics2D comp2D = (Graphics2D) comp;
    }

        图形的坐标系为横x竖y,左上为(0,0)


    二  文本

        使用函数drawString(<内容>,<x>,<y>);

        ①使用Font可以改变字体、字形、字号,一般用法为: 

    Font font = new Font("Arial",Font.BOLD+Font.ITALIC,24);

        其中第二参数Font.BOLD为粗体,Font.ITALIC为斜体,要复用多个参数,采用加法。

        设置完成后调用Graphics2D对象的setFont(font)方法设置字体。

        ②使用防锯齿改善显示质量

        使用Graphics2D对象的setRenderingHint()方法,它有两个参数,可以简述为键、键值。

    comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        ③规范化显示位置

        使用getFontMetrics(font)方法返回一个FontMetrics对象,利用该对象可以获取使用当前font显示的字符串的宽高,调用方法如下:

    FontMetrics metrics = getFontMetrics(font);
    metrics.stringWidth("abcde");//获取字符串宽度
    metrics.charWidth('a');//获取字符宽度
    metrics.getHeight();//获取字符串高度


        综合运用代码如下: 

    package Learn;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    public class GUI2D extends JFrame{
        
        public GUI2D(String text, String fontName){
            super("Show Font");
            setSize(425,150);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            TextFramePanel sf = new TextFramePanel(text,fontName);
            add(sf);
            setVisible(true);
        }
        
        public static void main(String[] argv){
            GUI2D text = new GUI2D("Test GUI Text","Arial");
        }
        
        public class TextFramePanel extends JPanel{
            String text;
            String fontName;
            public TextFramePanel(String text, String fontName){
                super();
                this.text = text;
                this.fontName = fontName;
            }
        
        public void paintComponent(Graphics comp){
            super.paintComponents(comp);
            Graphics2D comp2D = (Graphics2D)comp;
            comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);;
            Font font = new Font(fontName,Font.BOLD,24);
            FontMetrics metrics = getFontMetrics(font);
            comp2D.setFont(font);
            int x = (getSize().width - metrics.stringWidth(text))/2;
            int y = getSize().height / 2;
            comp2D.drawString(text, x, y);
        }
    }    
        
    }


    三  图形

        (一)填充图案(梯度渐变)

                填充图案可以作用于所有的Graphics2D组件,使用setPaint()方法来接收设定好的填充方案,常用的为Color或者GradientPaint,后者是一个梯度渐变,设置方法如下:

    GradientPaint gp = new GradientPaint(x1,y1,color1,x2,y2,color2,false);
    comp2D.setPaint(gp);

                其中(x1,y1,color1)是渐变起点,(x2,y2,color2)是渐变中点,第三个参数代表是否周期性渐变。

        (二)设置画笔

                画笔决定了线宽、线段端点样式和线段连接样式,参数如下

                BasicStroke(<线宽>,<端点样式>,<连接样式>);

                线宽是float型,通常为1.0F

                端点样式有CAP_BUTT(无端点)、CAP_ROUND(圆形端点)、CAP_SQUARE(方形,比无端点要长)

                连接样式有JOIN_MITER(延伸)、JOIN_ROUND(圆弧链接)、JOIN_BEVEL(直线连接)


        (三)绘制对象

                ①创建和设置对象,例如Line2D.Float ln;

                ②使用Graphics2D对象的draw()或者fill()方法,传入对象完成绘制。

                draw用于绘制边框,fill用于填充。

                例如线段的绘制过程为:

    Line2D.Float ln = new Line2D.Float(x1,y1,x2,y2);
    comp2D.draw(ln);


  • 相关阅读:
    多目标演化算法
    socket编程与线程模型二
    把DataGrid控件定制成漂亮的课程表
    socket编程与线程模型五
    socket编程与线程模型一
    关于RSS的点滴
    对.net事件的看法
    IIs上的证书安装要点
    2d游戏斜视角地图的实现
    Invoke and BeginInvoke
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154268.html
Copyright © 2011-2022 走看看