📄 style.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD> <TITLE>2D Text Tutorial Lesson 2: Drawing Styled Text</TITLE> <META NAME="AUTHOR" CONTENT="Monica Pawlan of the JDC"> <META NAME="CREATED" CONTENT="09/15/98"> <META NAME="OWNER" CONTENT="Editorial/JDC"> <META NAME="revision" CONTENT="@(#)style.src 1.10 11/10/99 JDC"> <META NAME="TOPIC" CONTENT="tutorial, graphics, media, JDK 1.2, text, API"> <STYLE TYPE="text/css"> <!-- CODE {font-family: Courier, Monospace; font-size: 12pt} PRE {font-family: Courier, Monospace; font-size: 11pt} --> </STYLE></HEAD><!-- Start Body Insert--><BODY BGCOLOR="#ffffff"><!-- End Body Insert--><!-- Start PageTop Insert --><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="100%"> <TR ALIGN="CENTER" VALIGN="TOP"> <TD WIDTH="157" ALIGN="LEFT"> <IMG SRC="/images/pixel.gif" HEIGHT="40" WIDTH="40" ALT=""> <A HREF="http://java.sun.com/index.html"><IMG SRC="/images/javalogo52x88.gif" WIDTH="52" HEIGHT="88" ALT="Java Technology Home Page" BORDER="0"></A> <BR> <IMG SRC="/images/pixel.gif" WIDTH="157" HEIGHT="1" ALT=""></TD> <TD> <FORM NAME="seek1" METHOD="GET" ACTION="http://search.java.sun.com/query.html"> <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%"> <TR> <TD ALIGN="RIGHT"> <IMG SRC="/images/stripelt.gif" WIDTH="6" HEIGHT="14" ALT=""></TD> <TD WIDTH="100%"> <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%"> <TR> <TD BGCOLOR="#CC9966" WIDTH="100%"> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD BGCOLOR="#CC9966"> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD BGCOLOR="#CC9966"> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> <TR> <TD BGCOLOR="#CC9966"> <IMG SRC="/images/pixel.gif" HEIGHT="2" WIDTH="1" ALT=""></TD> </TR> </TABLE> </TD> <TD ALIGN="LEFT"> <IMG SRC="/images/stripert.gif" WIDTH="6" HEIGHT="14" ALT=""></TD> <TD> <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"> <TR> <TD VALIGN="CENTER"> <A HREF="http://java.sun.com/a-z/index.html"><IMG SRC="/images/azindex.gif" BORDER="0" WIDTH="72" HEIGHT="11" ALT="A-Z Index"></A></TD> <TD VALIGN="CENTER"> <FONT FACE="Helvetica" SIZE="1"> <INPUT TYPE="text" SIZE="15" MAXLENGTH="128" NAME=qt></FONT></TD> <TD VALIGN="CENTER"> <INPUT TYPE="image" SRC="/images/search.button.gif" value="search" BORDER="0" WIDTH="55" HEIGHT="14" ALT="Search"></TD> </TR> </TABLE> </TD> </TR> </TABLE> </FORM> <P> <TABLE BORDER="0" WIDTH="100%" CELLPADDING="0" CELLSPACING="0"> <TR VALIGN="TOP"> <TD WIDTH="100%"><IMG SRC="/images/chiclet.row.gif" WIDTH="55" HEIGHT="18" ALT=""></TD> <TD ROWSPAN="4" ALIGN="RIGHT" WIDTH="152"> <A HREF="/developer/index.html"><IMG SRC="/images/developer.connection.header.gif" BORDER="0" HEIGHT="42" WIDTH="319" ALT="Java Developer Connection(SM)"></A></TD> </TR> <TR VALIGN="TOP"> <TD BGCOLOR="#FFFFFF" HEIGHT="1" WIDTH="100%"> <IMG SRC="/images/pixel.gif" HEIGHT="1" WIDTH="1" ALT=""></TD> </TR> <TR VALIGN="TOP"> <TD BGCOLOR="#CC9966" HEIGHT="1" WIDTH="100%"> <IMG SRC="/images/pixel.gif" HEIGHT="1" WIDTH="1" ALT=""></TD> </TR> <TR VALIGN="TOP"> <TD><A HREF="/developer/onlineTraining/"><IMG SRC="/images/online-training.gif" ALT="Online Training" BORDER=0></A></TD> </TR> </TABLE> </TD> </TR></TABLE><!-- End PageTop Insert --><!-- Start NavBar Insert --><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="3" BGCOLOR="#FFFFFF" WIDTH="157" ALIGN="LEFT"><!-- tab categories --><TR><TD><A HREF="http://java.sun.com/products/"><IMG SRC="/images/side.tab.products.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Downloads, APIs, Documentation"></A></TD></TR><TR><TD><A HREF="/developer/index.html"><IMG SRC="/images/side.tab.developer.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Java Developer Connection"></A></TD></TR><TR><TD><A HREF="/developer/infodocs/index.shtml"><IMG SRC="/images/side.tab.docs.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Tutorials, Tech Articles, Training"></A></TD></TR><TR><TD><A HREF="/developer/support/index.html"><IMG SRC="/images/side.tab.support.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Online Support"></A></TD></TR><TR><TD><A HREF="/developer/community/index.html"><IMG SRC="/images/side.tab.community.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Community Discussion"></A></TD></TR><TR><TD><A HREF="http://java.sun.com/industry/"><IMG SRC="/images/side.tab.news.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="News & Events from Everywhere"></A></TD></TR><TR><TD><A HREF="http://java.sun.com/solutions"><IMG SRC="/images/side.tab.solutions.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="Products from Everywhere"></A></TD></TR><TR><TD><A HREF="http://java.sun.com/casestudies"><IMG SRC="/images/side.tab.case.gif" HEIGHT="15" WIDTH="130" BORDER="0" ALT="How Java Technology is Used Worldwide"></A></TD></TR><TR><TD> </TD></TR><!-- End NavBar Insert --><!-- START SUB-NAV --><TR> <TD><!-- INSERT SUB-NAV INFO --> </TD></TR><!-- END SUB-NAV --></TABLE><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR><TD><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><!-- Template Version 2.0 --><!-- ================== --><!-- Start Main Content --><!-- ================== --><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR><TD><FONT FACE="Verdana, Arial, Helvetica, sans-serif"> <DIV ALIGN="RIGHT"> <FONT SIZE="-1"><A HREF="/developer/onlineTraining/index.html">Training Index</A></FONT> <H2>2D Text Tutorial<BR> <FONT SIZE="3">Lesson 2: Drawing Styled Text</FONT></H2> <H4><EM>By Monica Pawlan</EM></H4> <FONT SIZE="-1">[<A HREF="fonts.html"><<BACK</A>] [<A HREF="index.html#TOC">CONTENTS</A>] [<A HREF="more.html">NEXT>></A>]</FONT></DIV> <P>This lesson explains how to draw simple and complex styled text using the<A HREF="http://java.sun.com/products/jdk/1.2/docs/api/index.html"><CODE>java.awt.font.TextLayout</CODE></A> class to create interestingand pleasing visual effects. <UL><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#layout">Draw a Line of Text</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#multiple">Draw Multiple Lines of Text</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#slant">A New Slant on Text</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#image">Filling a Clipping Area with an Image</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#lines">Filling a Clipping Area with Lines</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#characters">Filling a Clipping Area with Characters</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="#replace">Text Attributes and Replacement Graphics</A></FONT><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><A HREF="exercises.html#two">Exercises</A></FONT></UL><HR> <A NAME="layout"></A><H3>Draw a Line of Text</H3>The <CODE>java.awt.font.TextLayout</CODE> class lets you create styled text from combinations of strings, fonts, and attribute sets. Oncecreated, a <CODE>TextLayout</CODE> object cannot be edited, but its methods give you access to layout, font, caret, selection, and hit test information. <P>The following code uses <CODE>Font</CODE>, <CODE>TextLayout</CODE>, and <CODE>FontRenderContext</CODE> objects to draw a simple text string in 24 point Times Bold. Here is the complete <A HREF="./Code/TimesB.java">TimesB.java</A> source code.<P><BLOCKQUOTE><IMG SRC="./Art/TimesB.gif"></BLOCKQUOTE><PRE>FontRenderContext frc = g2.getFontRenderContext();Font f = new Font("Helvetica",Font.BOLD, 24);String s = new String("24 Pont Helvetica Bold");TextLayout tl = new TextLayout(s, f, frc);Dimension theSize=getSize();g2.setColor(Color.green);tl.draw(g2, theSize.width/30, theSize.height/2);</PRE><UL><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><CODE>Java.awt.Font</CODE> represents an instance of a font face from the available system fonts.</FONT><P><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><CODE>java.awt.TextLayout</CODE> represents unchangeable styled character data.</FONT><P><LI><FONT FACE="Verdana, Arial, Helvetica, sans-serif"><CODE>java.awt.font.FontRenderContext</CODE> contains the information needed to correctly measure and position text when it is drawn.</FONT></UL><A NAME="multiple"></A><H3>Draw Multiple Lines of Text</H3>You can use the <CODE>TextLayout</CODE> and <CODE>java.awt.LineBreakMeasurer</CODE> classes to draw a paragraph of styled text. This next example uses a <CODE>LineBreakMeasurer</CODE> object to create and draw lines of text (text layouts) that fit within the component's width. Informationabout the font returned by the <CODE>TextLayout</CODE><A HREF="other.html#ascent"><CODE>getAscent</CODE> and <CODE>getDescent</CODE></A>methods is used to position the lines in the component. The text is stored as an <CODE>AttributedCharacterIterator</CODE>so the font and point size attributes can be stored with the text.<P>Here is the complete source code for the <A HREF="./Code/LineBreakSample.java"><CODE>LineBreakSample.java</CODE></A>example. The <A HREF="./Code/SampleUtils.java">SampleUtils.java</A>class contains the text displayed by the <CODE>LineBreakSample</CODE>application.<P><BLOCKQUOTE><HR><STRONG><FONT COLOR=PURPLE>Note</FONT></STRONG>:The <CODE>LineBreakSample</CODE> application supports foreign language text. See Lesson 4: <A HREF="int.html">Foreign Language Support</A>for more information.<HR></BLOCKQUOTE><P><BLOCKQUOTE><IMG SRC="./Art/LineBreak.gif"></BLOCKQUOTE><P><PRE>public class LineBreakSample extends Component { private LineBreakMeasurer lineMeasurer; private int paragraphStart; private int paragraphEnd; public LineBreakSample (AttributedCharacterIterator paragraph) { FontRenderContext frc = SampleUtils.getDefaultFontRenderContext(); paragraphStart = paragraph.getBeginIndex(); paragraphEnd = paragraph.getEndIndex(); lineMeasurer = new LineBreakMeasurer(paragraph, frc); } public void paint(Graphics g) { Graphics2D graphics2D = (Graphics2D) g; Dimension size = getSize(); float formatWidth = (float) size.width; float drawPosY = 0; lineMeasurer.setPosition(paragraphStart); while (lineMeasurer.getPosition() < paragraphEnd) { TextLayout layout = lineMeasurer.nextLayout(formatWidth); drawPosY += layout.getAscent(); float drawPosX; if (layout.isLeftToRight()) { drawPosX = 0; } else { drawPosX = formatWidth - layout.getAdvance(); } layout.draw(graphics2D, drawPosX, drawPosY); drawPosY += layout.getDescent() + layout.getLeading(); } }</PRE><A NAME="slant"></A><H3>A New Slant on Text</H3>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -