Font クラスの次の定数が、論理フォントの正規ファミリ名を表すために導入されました。
DIALOGDIALOG_INPUTSANS_SERIFSERIFMONOSPACEDFontRenderContext オブジェクトを作成し、アプリケーション経由でテキストを測定するには、FontMetrics クラスに追加された getFontRenderContext() メソッドを使用します。GraphicsEnvironment クラスの新しい registerFont(Font font) メソッドが導入されましたが、これを使えば、Font.createFont(int, java.io.InputStream) メソッドを使って作成されたフォント、または Font.deriveFont(int, float) メソッドを使って作成済みフォントから派生されたフォントを登録できます。登録が成功すると、registerFont メソッドから true が返されます。このメソッドから false value が返された場合、それは、登録しようとしているフォントが、作成済みのフォントでないか、あるいはこの GraphicsEnvironment オブジェクトにすでに登録されている非登録フォントと競合していることを意味します。FontRenderContext オブジェクトを作成できるように、java.awt.font.FontRenderContext クラスの新しいコンストラクタが導入されました。Java SE 6.0 の新機能を反映するために、次のメソッドが追加されました。
isTransformed() - FontRenderContext オブジェクトが変換されたレンダリングコンテキストでテキストを測定することを示す。getTransformType() - アフィン変換の整数タイプを取得する。getAntiAliasingHint() - FontRenderContext オブジェクトに適用可能なテキストアンチエイリアス処理レンダリングモードヒントを取得する。getFractionalMetricsHint() - FontRenderContext オブジェクトに適用可能なテキスト部分メトリックスレンダリングモードヒントを取得する。getPixelBounds() - TextLayout オブジェクトのピクセル境界を取得する。このメソッドは、影響のあるピクセル境界を定義する Rectangle オブジェクトを返します。Graphics オブジェクトにテキストレンダリングヒントを適用する機能が用意されています。LCD ディスプレイに最適化された新しいテキストアンチエイリアス処理メソッドが追加されました。これらは一部のシステム上でデフォルトで有効化され、RenderingHints クラス内で定義された対応するキーと値を使って制御できます。TextLayout クラスの getOutline(AffineTransform) メソッドとともに、GraphicAttribute クラスの新しい getOutline メソッドを使えば、GraphicAttribute オブジェクトがレンダリングする領域を表す Shape オブジェクトを取得できます。ShapeGraphicAttribute クラスの getOutline メソッドは、ShapeGraphicAttribute オブジェクトがレンダリングする領域の輪郭が取得されるように、GraphicsAttribute クラスの対応するメソッドをオーバーライドします。LayoutPath クラスは、ベースラインを基準にした Point2D 位置とユーザー空間内のポイントとのマッピングを提供します。このクラスの 2 つのメソッドは、双方向のマッピングを可能にします。つまり、ある位置からユーザー座標内のあるポイントへと、逆にユーザー座標内のあるポイントからある位置へです。TextLayout オブジェクトのレイアウトパスを取得するために、getLayoutPath() メソッドが TextLayout クラスに追加されました。TextAttribute クラスに新しい属性が導入されました。KERNING 属性を使えば、カーニング整数値を要求して文字の外観をより美しくできます。KERNING_ON 定数は、テキストレンダリング時にフォントによって指定されたカーニングペアに従ってグリフ間の間隔が調整されることを要求します。LIGATURES 属性の定数値 LIGATURES_ON を使用すると、フォントによって指定されたオプションの合字を適用するように要求されます。TRACKING 属性は、グリフ間の間隔の粗密を制御するために使用されます。たとえば、TRACKING_LOOSE 定数を使用すると、各グリフ間に追加のスペースが割り当てられ、配分されます。BufferStrategy クラスの新しいメソッドjava.awt.image.BufferStrategy クラスに dispose() メソッドが追加されました。この新しいメソッドは、BufferStrategy オブジェクトによって消費されたシステムリソースを解放します。さらに、このメソッドは、関連付けられた Component インスタンスからこの BufferStrategy オブジェクトを削除します。AlphaComposite クラスに次のメソッドが追加され、指定された合成規則または alpha 値を使用する AlphaComposite オブジェクトを取得できるようになりました。
public AlphaComposite derive(int rule)public AlphaComposite derive(float alpha)この 2 つのメソッドを使えば、開発者はさまざまな合成効果のコーディングを行い、getInstance メソッドのより複雑な使用を避けることができます。
Composite alpha0 = null, alpha1 = null;
alpha0 = AlphaComposite.SrcOver.derive(alpha);
alpha1 = AlphaComposite.SrcOver.derive(1-alpha)
MultipleGradientPaint クラスを継承した LinearGradientPaint クラスと RadialGradientPaint クラスは、特定のカラーグラデーションパターンを使って Shape オブジェクトを塗りつぶします。 MultipleGradientPaint.CycleMethod 列挙は、無効化 (CycleMethod.NO_CYCLE)、反射 (CycleMethod.REFLECT)、または繰り返し (CycleMethod.REPEAT) ペイントを使ってグラデーション境界の外側のペイントを処理するために使用されます。
Point2D start = new Point2D.Float(0, 0);
Point2D end = new Point2D.Float(100, 100);
float[] dist = {0.0f, 0.2f, 1.0f};
Color[] colors = {Color.BLACK, Color.WHITE, Color.GRAY};
LinearGradientPaint p =
new LinearGradientPaint(start, end, dist, colors, CycleMethod.REFLECT);
AffineTransform クラスで次のメソッドが導入されました。public static AffineTransform getRotateInstance(double vecx, double vecy)public static AffineTransform getRotateInstance(double vecx, double vecy, double anchorx, double anchory)public static AffineTransform getQuadrantRotateInstance(int numquadrants)public static AffineTransform getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory)public void rotate(double vecx, double vecy)public void rotate(double vecx, double vecy, double anchorx, double anchory)public void quadrantRotate(int numquadrants)public void quadrantRotate(int numquadrants, double anchorx, double anchory)public void setToRotation(double vecx, double vecy)public void setToRotation(double vecx, double vecy, double anchorx, double anchorysetToQuadrantRotation(int numquadrants) メソッドを使えば、指定された数の四分円だけ回転できます。その片方は、指定されたアンカーポイントを中心にして指定された数の四分円だけ座標を回転させる変換を返します。AffineTransform クラスの新しいメソッドは逆変換機能を改善します。Java SE 1.2 で createInverse メソッドが導入され、これによって形状の座標を元の位置に変換していましたが、新しい invert() メソッドを使えば、現在の変換をそれ自体の逆状態に設定できます。GeneralPath クラス用の倍精度GeneralPath クラスの倍精度版が含まれていませんでした。Path2D クラスは PathIterator インタフェースで反復可能なパスを表しており、次の 2 つのサブクラスを持っています。Path2D.Float および Path2D.Double。変更後の階層では、GeneralPath クラスは Path2D.Float クラスのサブクラスになりました。これらがいずれも単精度で使用できるのに対し、Path2D.Double クラスは倍精度に適用できます。GeneralPath クラスではなく Path2D.Float クラスを使用する理由の 1 つは、アプリケーションで単精度型と倍精度型の両方が採用されている場合の、コードの一貫性と明示性を高めることです。hashCode() メソッドと equals() メソッドRectangle2D クラスには hashCode() メソッドと equals() メソッドが含まれていましたが、RectangularShape クラスのほかのサブクラスにはその同じ機能が含まれていませんでした。JDK 6.0 ではこのギャップを埋めるために、Arc2D、Ellipse2D、および RoundRectangle2D クラスに hashCode() と equals() メソッドが追加されています。PrinterJob クラスでの拡張機能PageFormat オブジェクトへの変換をより簡単に行うための簡易メソッドとして、getPageFormat メソッドが JDK 6.0 に追加されました。3 次および 2 次のベジェ曲線の描画用として、適応的前進差分が適用されるパイプラインが別個に開発されました。このアプローチを使うと、ベジェ曲線の描画品質と描画速度が顕著に改善されます。
スキャン変換アルゴリズムの現在の実装のため、Microsoft Sans Serif フォントのグリフが破損しているように見えていました。6282527 バグの修正の一部として、スマートドロップアウトメカニズムが追加されています。
あたかもコードが配列の末尾より後の領域にアクセスしたかのように Java ヒープ内でメモリーが破壊された結果として、VM のクラッシュが発生していました。この修正は、イメージの最初の部分が取得された時点でイメージ表現コードの寸法をチェックします。寸法が一致しない場合には、内部バッファー内のイメージが作成し直されます。
ColorConvertOp インスタンスに指定されたソースとデスティネーションの ColorSpace が同じである場合にピクセル値が異なるColorConvertOp インスタンスに指定されたソースとデスティネーションの ColorSpace オブジェクトが同じであった場合に、色変換されたデスティネーションと元のソースとの間でピクセル値が異なっていました。このバグを修正するために、sRGB プロファイルが更新され、高速トラックが作成されています (色変換は一切行われない)。
Truetype ヒントは、ピクセルグリッドに関するグリフの方向が固定されるという前提で設計されました。それが、回転、変形、拡大縮小などの複雑なアフィン変換が truetype ヒントでサポートされなかった理由です。その修正として、次のアプローチが実装されています。
PrintService オブジェクトの設定時に名前を指定しないと JVM がクラッシュするPrintService オブジェクトの設定時に名前を指定しなかった場合 (getName() メソッドが null を返す場合)、JVM がクラッシュしていました。この問題の原因は、次のような特定ユーザーの実装でした。PrintService インタフェースの getName() 関数から null が返され、この null 値がネイティブ関数 setNativePrintService に渡されていました。
IndexColorModel イメージの印刷が失敗することがあるWindows プラットフォームで、ビットマスク透明度を含むイメージの印刷が正しく行われないことがありました。ビットマスク透明度を使用している場合に問題が存在していました。印刷コードは、ビットマスク透明度を、元のイメージのより小さな複数のサブイメージとして処理していました。この修正には、もっとも単純でリスクの少ない解決方法が含まれています。それは、常にイメージのコピーを作成することです。
Type1 ヒントのサポートが欠けているJDK 6 より前に Java のフォントラスタライザがサポートしていたヒントは、Truetype フォントに対するヒントだけでした。しかし、Solaris および Linux プラットフォームでは Type1 フォントが一般的に使用されており、ヒントを使用しない Type1 フォントは通常、あまり自然には見えませんでした。type1 のヒントをサポートするために実装された機能は、次のとおりです。
Truetype のヒントは、任意の変換のサポートを想定せずに設計されました。この制限を克服するため、重要な変換が要求された場合には、「安全」な単位行列を使ってヒントを適用したあと、ヒント適用後の輪郭を変換します。この問題は、4654540 の修正の一部として解決されました。
イメージ変換用のコードは、イメージ処理ライブラリを使って処理を実行していました。このアプローチでは、変換処理を行うたびに少なくとも 1 つの中間バッファーを作成する必要がありました。新しいコードでは、任意の内部処理形式の変換と任意の内部処理形式への合成を、1 つの処理内で、スタックで割り当てられた最小の 1 行ピクセルバッファーのみを使って行えます。
Windows Vista では、DirectDraw によるハードウェア高速化は現時点ではデフォルトで無効になっていますが、これは、Vista のデスクトップウィンドウマネージャーとの互換性に問題があるからです。
-Dsun.java2d.noddraw=false プロパティーを使えば、DirectDraw パイプラインの使用を再度有効にできます。ただし、レンダリングアーティファクトやパフォーマンスの問題のため、それはお勧めできません。Direct3D パイプラインも有効にするには、前述のフラグと -Dsun.java2d.d3d=true を組み合わせて使用するようにしてください。