Java™ 2 SDK, Standard Edition, v 1.4でのSwingの変更点および新機能

リリース1.4.1および1.4.2に固有の変更点

このドキュメントには、すべての1.4.*リリースに関連する情報が含まれています。1.4.1および1.4.2に固有の情報については、Java 2 SDK, Standard Edition, v 1.4からのSwingの変更点を参照してください。

主要な変更点

Swingに大きな影響を与えるような各機能については、通常、個別のドキュメントに分けて説明します。次のリンクをクリックして、それぞれのドキュメントを参照してください。

微細な変更点

各セクションで、関連する一連のクラスの変更点について説明します。ほとんどのセクションでは、JEditorPaneJTableなど、Swingの単一コンポーネントの一部であるクラスに焦点が当てられています。各APIの変更は、バグ・データベースにあるレポートへのリンクと関連付けられています。このサイトで、変更の理由となったバグやRFE (機能拡張の要求)を参照することができます。このドキュメントには、各APIの変更についての次の情報も含まれています。

セクション


Box

BoxがJComponentから派生するようになった

この変更に関連するバグ追跡レポート: 4304100

従来、Boxのスーパー・クラスはComponentでした。Boxは、JComponentから派生しなかったので、たとえば、ボーダーを設定したり、revalidateを発行するなどで、通常のSwingコンポーネントのように使用できませんでした。これにかぎらず、視覚的な変更やその他の同様な視覚上のプロパティの変更でも、標準的なSwingコンポーネントは通常、repaintまたはrevalidateを使用して変更しますが、Boxはこの動作に適合しませんでした。このリリースから、BoxおよびBox.FillerJComponentスーパー・クラスから派生するので、標準Swingコンポーネントにより近い動作をします。

BoxLayoutが右から左、および下から上へのコンポーネントの向きをサポートするようになった

この変更に関連するバグ追跡レポート: 4140833

BoxLayoutでは、レイアウトするContainerComponentOrientationが考慮されませんでした。他のAWTレイアウト・マネージャは、JDK 1.2にComponentOrientation機能が追加されたときに、コンポーネントの向きを考慮するように作成されました。この機能をBoxLayoutに追加すると、中東ロケールをサポートするプログラムで役に立ちます。BoxLayoutは、JOptionPaneJToolBarJMenuBarなどの、その他のSwingコンポーネントにも内部的に使用されます。この機能を追加することは、このようなコンポーネントがComponentOrientationをサポートするためにも必要です。

この機能をサポートするために、定数のLINE_AXISPAGE_AXIS、およびBoxLayout(Container, int)コンストラクタがBoxLayoutに追加されました。

さらに、SizeRequirements内のメソッドも変更されました。


JButton

デフォルト・ボタンはWindows LAFのフォーカスに従う

この変更に関連するバグ追跡レポート: 4659800

1.4.0で発生していたこのバグのため、デフォルト・ボタンは常にフォーカスに従うわけではありませんでした。これは1.4.1で修正されました。

強調表示される文字の新規コントロール

この変更に関連するバグ追跡レポート: 4138746

AbstractButtonJLabelの両方を使用することで、あるアクションを実行するためにキーボードから入力する文字(ニーモニック)を設定できます。javadocではこれらのメソッドについて、設定した文字が最初に出現したときに大文字小文字にとらわれず強調されると説明しています。この機能はほとんどの開発者に適合しますが、同じ文字がまた出現した場合にそれも強調表示する必要がある場合も、かなりの程度あります。たとえば、「メモ帳」内では、「a」が「名前をつけて保存(Save As)」のアクセラレータですが、2番目の「a」が強調される文字です。開発者には、これを指定できる方法が必要です。

この問題は、新規メソッドのAbstractButton.setDisplayedMnemonicIndexおよび JLabel.setDisplayedMnemonicIndexで解決できます。setMnemonicまたはsetDisplayedMnemonicメソッドでニーモニックを指定すると、setDisplayedMnemonicIndexメソッドで、強調表示される文字を変更できます。また、新しいAbstractButton.getDisplayedMnemonicIndexおよびJLabel.getDisplayedMnemonicIndexメソッドもあります。さらに、drawStringUnderlineCharAt javax.swing.plaf.basic.BasicGraphicsUtilsに追加されました。

AbstractButton.configurePropertiesFromActionでACTION_COMMAND_KEYプロパティが尊重されるようになった

この変更に関連するバグ追跡レポート: 4457940

これまで、AbstractButtonconfigurePropertiesFromAction(Action)メソッドおよびconfigurePropertiesFromAction(Action, String[])メソッドでは、ACTION_COMMAND_KEYプロパティが尊重されませんでした。このリリースでは、この点が対処されました。そのため、次に示すAbstractButtonのサブクラスで、configurePropertiesFromActionメソッドのjavadocが変更されました。


JComboBox

JComboBoxへのPopupMenuListenerの追加

この変更に関連するバグ追跡レポート: 4287690

コンボボックスのドロップ・ダウン・メニューがポップアップされたり、元に戻されたり、取り消されたりするときにリスナーに通知される機能のサポートを、多くの開発者が求めていました。アプリケーションでは、このようなリスナーを使用して、コンボボックスのモデルを各項目とともに生成することができました。

この機能は、ルック・アンド・フィールの実装のいくつかで提供されない可能性のあるドロップ・ダウン・メニュー機能用にリスナーをサポートすることについて、なんらかの、おそらくはアカデミックな懸念があったために、初期バージョンのSwingには提供されませんでした。しかし、Javaとともに出荷されるすべてのルック・アンド・フィールと、ほかのすべてのルック・アンド・フィールでも、コンボボックスのすべての項目を表示するためにドロップ・ダウン・メニューが使用されています。そのため、メニュー状態の変更通知を取得するために、移植性のないハックに頼る開発者もいました。

このリリースでは、PopupMenuListenerJComboBoxに追加されました。基盤となるルック・アンド・フィールが項目メニューをサポートしているかぎり、このリスナーを使用して、コンボボックスのメニューが表示される前後にアクションを実行できます。この機能をサポートするには、JComboBoxの以下の新規メソッドが必要です。

    public void addPopupMenuListener(PopupMenuListener l)
    public void removePopupMenuListener(PopupMenuListener l)
    public void firePopupMenuWillBecomeVisible()
    public void firePopupMenuWillBecomeInvisible()
    public void firePopupMenuCanceled()

JComboBoxがリスト用のプロトタイプのセルをサポートするようになった

この変更に関連するバグ追跡レポート: 4231298

これまでJComboBoxは、表示する各項目のレンダラを構成していました。リストが大きい場合、この構成方法は時間がかかります。開発者がかわりに必要としていたのは、すべてのセルに一致するプロトタイプを指定し、そのプロトタイプだけが各セルのかわりに1回だけチェックされるような機能でした。このリリースでは、 getPrototypeDisplayValue setPrototypeDisplayValueJComboBoxに追加されました。

JComboBoxおよび関連クラスについてのJavadocドキュメントが改善された

この変更に対応するバグ追跡レポートは、4394300です。

これまで、JComboBoxのpublic APIとそのUI委譲には、その実装方法を詳細に説明したjavadocが含まれていました。ただし、時間の経過とともに機能の再考とバグの修正を経て、このjavadocは時代遅れとなりました。実装の詳細ではなくメソッドの動作を説明するように、javadocのチェックと改訂が行われました。また、実際には非公開であるはずの「protected」メソッドやフィールドに関しては、このようなメソッドのオーバーライドや呼出しを奨励しないように、javadocがいくつか削除されました。

そのため、JComboBoxComboBoxModelMutableComboBoxModeljavax.swing.plaf.basic.BasicComboBoxUIjavax.swing.plaf.basic.ComboPopup、およびjavax.swing.plaf.basic.BasicComboPopupのドキュメントが変更されました。


JFileChooser

Windowsルック・アンド・フィールでのJFileChooserの改善

この変更に対応するバグ追跡レポートは、4290709です。

SwingのJFileChooserは、Windowsルック・アンド・フィールに基づいたMicrosoft Windowsの一般的なファイルのダイアログ・ボックスと似ていますが、多少の欠如部分があり、ご不満を頂いていました。特に、Microsoft Windowsの外観ガイドには、次のような記述があります。

通常の「開く」および「名前を付けて保存」ダイアログ・ボックスが使用できない場合は、自分で作成するダイアログ・ボックスに次の機能を組み込んで、シェル、Windowsアクセサリ、およびその他のアプリケーションと確実に一貫性を保つようにしてください。

上の箇条書きの最初の4項目をSwing内で実現するには、AWTからの追加のAPIサポートが必要です。AWT共通ファイル・ダイアログも、現在では、次の理由で受け入れ難い解決方法になりました。

新しい機能が、次のpublicメソッドをjavax.swing.filechooser.FileSystemViewクラスに追加することで実行されます。このクラスによって、Fileクラスの適用範囲を超えて、ファイルとディレクトリの情報が提供されます。

    public boolean isTraversable(File f)
    public String getSystemDisplayName(File f)
    public String getSystemTypeDescription
    public Icon getSystemIcon(File f)
    public boolean isParent(File folder, File file)
    public File getChild(File parent, String filename)
    public boolean isFileSystem(File f)
    public boolean isFileSystemRoot(File dir)
    public boolean isDrive(File dir)
    public boolean isFloppyDrive(File dir)
    public boolean isComputerNode(File dir)
    public File createFileSystemRoot(File f)
    public File[] getRoots()

isTraversableメソッドがjavax.swing.plaf.basic.BasicFileChooserUI.BasicFileViewから削除されたので、そのスーパー・クラスの実装が使用されます。

createListSelectionListener javax.swing.plaf.metal.MetalFileChooserUIに追加されました。

また、 javax.swing.plaf.basic.BasicDirectoryModelには、次の変更があります。

    public void intervalAdded(ListDataEvent e)
    public void intervalRemoved(ListDataEvent e)
    public void renameFile(File oldFile, File newFile)


JFileChooser内で「Open Directory」ボタンの特徴を指定する新機能

この変更に対応するバグ追跡レポートは、4318785です。

ルック・アンド・フィールでは、JFileChooser内でディレクトリを開くために使用するボタンのテキスト、ツールチップのテキスト、およびニーモニックを指定する機能が必要です。

この機能をサポートするために、次の定数とメソッドが plaf.basic.BasicFileChooserUIに追加されました。

    protected int directoryOpenButtonMnemonic = 0;
    protected String directoryOpenButtonText = null
    protected String directoryOpenButtonToolTipText = null
    protected boolean isDirectorySelected()
    protected void setDirectorySelected(boolean b)
    protected File getDirectory()
    protected void setDirectory(File f)

複数ファイル選択のサポート

この変更に対応するバグ追跡レポートは、4218431です。

1.4リリースのJFileChooserで複数のファイルを選択できるようになりました。ただし、setMultiSelectionEnabledのjavadocは1.4.1リリースまで更新されていません。


JInternalFrame

JInternalFrameでは、長すぎるタイトルを切り詰めるようになった

この変更に対応するバグ追跡レポートは、4134077です。

以前は、内部フレームのタイトルが長すぎる場合でも、クリップされませんでした。また、タイトルがアイコン部分の上に重ねて表示され、タイトルがクリップされたことをユーザーが視覚的に検討できませんでした。この問題を解決するために、BasicInternalFrameTitlePane.getTitleが追加されました。

Windowsルック・アンド・フィール内のJInternalFrameのタイトルがグラデーション付きで描画されるようになった

この変更に関連するバグ追跡レポート: 4389209

これを正しく実装するには、com.sun.java.swing.plaf.windows.WindowsInternalFrameTitlePaneクラスを作成する必要がありました。このクラスはjavax.swing.plaf.basic.BasicInternalFrameTitlePaneの拡張ですが、適切な場合にグラデーションを描画するために、ペイント・ルーチンがオーバーライドされています。従来のコードを再利用するもっとも適切な方法は、バックグラウンドだけをペイントする部分をペイント・メソッドから分離し、WindowsInternalFrameTitlePane内でその部分をオーバーライドすることです。paintTitleBackgroundメソッドがjavax.swing.plaf.basic.BasicInternalFrameTitlePaneに追加されました。


JTextComponent

JEditorPane内のイメージ用のツールチップに対する新規サポート

この変更に関連するバグ追跡レポート: 4252169

以前のリリースでは、ImageView (JEditorPane内でイメージを描画するView)がツールチップのテキストを表示することはできませんでした。Viewには、JTextComponentのために表示されるツールチップ・テキストに影響を与える手段がなかったためです。今回のリリースでは、JTextComponentにツールチップがない場合に、マウスの下のビューがツールチップを表示するように要求されます。そのViewがALT属性のあるHTML要素に対応付けられている場合、ツールチップのテキストは、その属性の値になります。

Viewがツールチップのテキストに影響を及ぼすことができるようにするには、多数のメソッドが必要でした。getToolTipTextjavax.swing.plaf.TextUIに追加されたので、特定の位置のツールチップのテキストを取得できるようになりました。これで、JTextComponentgetToolTipTextメソッドは、ツールチップがJTextComponentに設定されていないとみなし、TextUIにツールチップを転送します。

また、getToolTipTextjavax.swing.text.Viewに追加されました。View.getToolTipTextのデフォルトの実装では、要求が指定された位置にあるViewの子に転送されます。特定の位置にある子を簡単に判断できるように、getViewIndexViewに追加されました。

Viewの実装では、getViewIndexが呼び出され、次に子のViewgetToolTipTextが呼び出されます。次にImageViewによってgetToolTipTextがオーバーライドされ、そのAttributeSetのALT属性から値が返されます。

ImageViewクラスがpublicになった

この変更に関連するバグ追跡レポート: 4233811

パッケージの非公開クラスであったjavax.swing.text.html.ImageViewが公開されたので、このクラスを拡張することができるようになりました。

HyperlinkEventの読取り専用新規プロパティelementOffset

この変更に関連するバグ追跡レポート: 4182124

HTMLパッケージでは、マウスがリンク上を移動したことをHyperlinkEventおよびHyperlinkListenerクラス経由で検出する方法が、開発者に公開されました。開発者にとっては、HyperlinkListenerに通知されたときにドキュメントから情報を抽出する方法が必要な場合もあります。従来は、HyperlinkEventが示すドキュメント内の位置を、開発者が判断する方法がありませんでした。この問題を改善するために、HyperlinkEvent(Object, EventType, URL, String, Element)コンストラクタとgetSourceElementメソッドがHyperlinkEventに追加されました。

HTMLFrameHyperlinkEventによってHyperlinkEventが拡張され、これはすでにgetSourceElementメソッドを定義しています。現在ではスーパー・クラスでこのメソッドを定義するため、getSourceElementのjavadocは、HTMLFrameHyperlinkEventから削除されました(メソッド自体は継承されている)。

HTMLパーサーの変更 - 空白の報告

この変更に関連するバグ追跡レポート: 4241788

HTMLパーサー(javax.swing.text.html.parser.Parser)のセマンティックスが、NetscapeやInternet Explorerなどのブラウザにより良く適合するように若干変更されました。APIに変更はありませんが、空白の報告で多少の変更があります。どのように変更されたかを示します。strict (javax.swing.text.html.parser.Parserのインスタンス変数)== false (デフォルト)の場合は、NetscapeとExplorerの動作を模倣するために、インスタンス変数が使用されます。

次に、問題のあるシナリオを示します。

'<b>blah <i> <strike> foo'

これは、次のように処理される可能性があります。

'<b>blah <i><strike>foo'

同様に、

'<p><a href="xx"> <em>Using</em></a></p>'

これは、次のように処理される可能性があります。

'<p><a href="xx"><em>Using</em></a></p>'

タグがフローを分断したり末尾の空白が検出されると、インスタンス変数はtrueに設定されます。そのため、すべての空白が無視されます。最初に空白以外の文字があったときに、インスタンス変数はfalseに設定し直されます。

HTMLフォームの書込みに対するサポートが改善された

この変更に関連するバグ追跡レポート: 4200439

JDKで提供されたHTMLサポートでは、フォームの各要素の書込みが正しくサポートされませんでした。この原因の大部分は、フォームのモデル化の方法にありました。ドキュメント・オブジェクトのモデル(www.w3.orgDOMを参照)に一層一致させるために、フォームが内部的にモデル化される方法が変更されました。以前は、フォームのすべての属性が、子の文字要素すべてのattributeSetに格納されました。このリリースから、HTMLファイル自体に一層一致するように、フォームを表す要素が作成されます。この方法により、フォームがより良くモデル化される上に、フォームを一貫して書出せるようになります。

この変更は、厳密でないフォームの処理に依存していた開発者にとっては影響があります。たとえば、次のような無効なHTMLを処理するとします。

<table>
<form>
</table>
</form>

これまでは、次のようにみなされていました。

<form>
<table>
</table>
</form>

このリリースでは、代わりに次のように処理されます。

<table>
<form>
</form>
</table>

javax.swing.text.DefaultHighlighterクラス内の静的なDefaultPainterがFinalになった

この変更に関連するバグ追跡レポート: 4328938

このリリース以前は、javax.swing.text.DefaultHighlighterのstaticフィールドDefaultPainterはfinalではありませんでした。これには、潜在的にセキュリティ上の問題がありました。このリリースでは、これがFinalになりました。

PlainDocumentコンストラクタが公開された

この変更に関連するバグ追跡レポート: 4220001

このリリース以前は、PlainDocument(AbstractDocument.Content)コンストラクタは保護されていました。つまり、このコンストラクタを使用しようとする開発者はサブクラス化する必要がありました。このコンストラクタはもともと公開する予定で作成され、このリリースで公開されました。

JEditorPane.scrollToReferenceメソッドが公開された

この変更に関連するバグ追跡レポート: 4304676

JEditorPane.scrollToReferenceは、不適切な理由で保護されていました。このメソッドはサブクラス化しなくても役に立つことを目的に作成されており、このリリースで公開されました。

Document.getTextメソッドで部分戻り値が許可されるようになった

この変更に関連するバグ追跡レポート: 4156650

テキスト・ドキュメントの内容に効率的にアクセスするには、DocumentgetText(int, int, Segment)メソッドを定義します。残念なことに、呼出し側には、受け手側が要求を効率的に満たすかどうかを判断する手段がありませんでした。たとえばGapContentは、要求がドキュメントの最後に編集されたスポット(ギャップ)を超えないかぎり、要求を効率的に実装できました。内容への効率的なアクセスを促進するために、setPartialReturnおよび isPartialReturnメソッドがSegmentに追加されました。Document.getTextのセマンティックスが現在のところ保持されていますが、より効率的に使用するために、呼出し側がsegment.setPartialReturn(true)を呼び出して、いつでもドキュメントの一部を取得し直す準備をしておく必要があります。

JEditorPaneでHTMLのユーザー補助機能がサポートされるようになった

この変更に関連するバグ追跡レポート: 4303259

障害を持つ方々へのユーザー補助機能(または技術)では、Accessibility APIを使用してJEditorPaneの内容にプログラムでアクセスすることが要求されます。以前のリリースでの唯一のアクセスは、ハイパーリンク・テキストへのアクセスでした。このAPIの変更によって、Accessibility APIを使用してすべてのHTMLコンポーネントにアクセスできるようになりました。

javax.swing.text.html.HTMLEditorKitは、javax.accessibility.Accessibleを実装するようになりました。

JEditorPaneは、 getAccessibleContext()を実装するようになりました。

新しいAbstractDocument.replaceメソッドの追加サポート

この変更に関連するバグ追跡レポート: 4458513

RFE 4431047の一部として、replaceメソッドがAbstractDocumentに追加されました。このメソッドからremoveおよびinsertString (Documentを変更するためのインタフェースに定義されているメソッドはこの2つのみ)を呼び出すことができるように、 writeLockを呼び出すための制約が緩和されました。このため、replaceメソッドは、removeinsertStringをオーバーライドするだけの、古いバージョンのAbstractDocumentとも互換性があります。


JOptionPane

新規showInputDialogメソッド

この変更に関連するバグ追跡レポート: 4226644

この前のリリースでは、デフォルトの文字列付きのテキスト・フィールドを含んだ単純な入力ダイアログ・ボックスを表示しようとする場合、7個のパラメータが必要な、複雑なJOptionPane.showInputDialogメソッドを呼び出す必要がありました。新しい2つのshowInputDialog(Object, Object)およびshowInputDialog(Component, Object, Object)メソッドでは、単純な入力ダイアログ・ボックスの作成と表示がより便利になりました。

JOptionPaneでComponentOrientationがサポートされるようになった

この変更に関連するバグ追跡レポート: 4265463

JOptionPaneでは、右から左の方向のレイアウトが必要でした。この変更はバグの修正であり実際のAPIは必要ありませんが、JOptionPaneおよびjavax.swing.plaf.basic.BasicOptionPaneのクラス仕様が更新されました。

JOptionPaneでサイズ変更できないダイアログが使用されるようになった

この変更に関連するバグ追跡レポート: 4829588

リリース1.4.0から、サイズ変更できないダイアログを使用するためにJOptionPaneが変更されました。その結果、多くのJOptionPaneメソッドによって表示されるダイアログが多少変化するようになりました。最初の2つの変更が必要です。

余分に長いテキストを処理するときにこの変更の副作用が発生します。以前は、ダイアログのサイズは画面サイズに制限されるため、長いテキストは最後に「...」が表示されて切り詰められました。現在は、余分に長いテキストが原因で、すべてのテキストを収めるためにダイアログのサイズが画面サイズよりも長くなることがあります。バグ4829588を継続的に参照して、この望ましくない動作が解決されたかどうかを確認してください。

JPopupMenu

JPopupMenuおよびフォーカス

このリリースから、JPopupMenuを表示すると親のJRootPaneにフォーカスが移動するようになりました。この変更は、JPopupMenuでキーボード・トラバーサルをサポートするために行われました(4212563)。これにより、フォーカスを失ったかどうかを検証するアプリケーションで問題が発生します。このことにより影響を受ける場合は、focusLost通知でFocusEventの一時的なプロパティをチェックし、trueの場合は何も行わない、とすることをお薦めします。JPopupMenuにフォーカスが移動することが望ましくない場合、現在のリリースではこの移動を無効にすることができません。リリース1.4.1では、フォーカスを移動するかどうかの決定は、JPopupMenuのフォーカス可能性に基づいています。詳細は、バグ4632782を参照してください。

JPopupMenuでキー・バインドがサポートされるようになった

この変更に関連するバグ追跡レポート: 4212563

以前は、JPopupMenuでキー・バインドはサポートされませんでした。矢印キー、ニーモニック、Enterキー、およびEscキーは、JPopupMenuがJMenuJComboBoxのような複合コンポーネントの一部として使用されないかぎり、JPopupMenuには作用しませんでした。

この動作は、JPopupMenuには常にフォーカスが当てられず、そのためKeyEventsを取得することができないことに原因があります。以前のリリースでは、Swingのような軽量のツールキットがフォーカスを要求し、フォーカスの変更が一時的であることを示すことは不可能でした。新しいフォーカスのアーキテクチャによってこの問題が解決され、Swingで一時的なフォーカスの変更を要求できるようになりました。このバグを修正するには、JPopupMenuにフォーカスを取得させ、キー・バインドが処理されるようにする必要がありました。フォーカスが変更されることを今まで期待していなかったコンシューマは、コードを更新して、FocusEventの一時的なプロパティをチェックする必要があります。

JPopupMenu.setVisible(true)がヘッドレス・モードでHeadlessExceptionをスローするようになった

この変更に関連するバグ追跡レポート: 4401222

ヘッドレス・モードが新規に導入された際、 JPopupMenu.setVisible(true)はヘッドレス・モードで呼び出されるとNullPointerExceptionをスローするように実装されました。このリリースからはHeadlessExceptionをスローするように変更され、ヘッドレス・モードでは実行できない操作であることを示すようになりました。


JPanel

新規のsetUIおよびgetUIメソッド

この変更に関連するバグ追跡レポート: 4226238

setUI/getUIメソッドは、そのルック・アンド・フィールがプラガブルなルック・アンド・フィール (plaf)で定義される場合でも、JPanelに実装されていませんでした。たとえば、javax.swing.plaf.basic.BasicPanelUI.javaを参照してください。


JTabbedPane

JTabbedPaneおよびフォーカス

新しいフォーカスの仕様では、表示されていないコンポーネントでのフォーカス要求は失敗します。これにより、多少の副作用が発生します。1つの副作用として、JTabbedPaneに関連付けられているChangeListenerからのフォーカス要求が失敗する可能性があります。また、コンポーネントが現在表示されていないため、以前のリリースではフォーカス要求が機能していた状況でフォーカス要求が失敗することがChangeListenerに通知されます。JTabbedPaneでこの状況が発生した場合は、フォーカスを要求する前にコンポーネントを表示することをお薦めします。その他の状況では、異なる方法が必要となる場合があります。

JTabbedPane内の新規indexAtLocationメソッド

この変更に関連するバグ追跡レポート: 4241787

この変更以前は、クライアント・プログラムに、座標で示す位置をタブ付きペイン内の特定のタブへ変換する方法がありませんでした。このため、JTabbedPaneでタブの上へメニューをポップアップさせるなどの特殊なイベント処理を実装することが困難でした。

indexAtLocationメソッドがJTabbedPaneに追加されました。

JTabbedPane内のタブへアクセスするための新規ニーモニック・サポート

この変更に関連するバグ追跡レポート: 4284674

JTabbedPaneの各ペインでは、以前はニーモニックが使用できませんでした。この問題の解決のために、getDisplayedMnemonicIndexAtおよびsetDisplayedMnemonicIndexAtが追加されました。

JTabbedPaneにスローされる例外に一貫性ができた

この変更に関連するバグ追跡レポート: 4287053

JTabbedPaneクラスは、多くのメソッドを保有するコンテナであり、パラメータとして整数のインデックスをとります。これらのメソッドには、残念なことに例外のスローに一貫性がありませんでした(チェック/スローするメソッドもあれば、しないメソッドもある)。さらに、javadocにも誤りがあり、基盤となるVectorによって実際にはArrayIndexOutOfBoundsExceptionがスローされる場合に、IllegalParameterExceptionがスローされると記述されていました。

0から「タブ数 - 1」までの有効な範囲内になければならないインデックスをとるすべてのメソッドは、現在は、IndexOutOfBoundsExceptionをスローすると記述されています(注 - 互換性をとるという理由から、基盤のコードでは引き続きArrayIndexOutOfBoundsExceptionがスローされる)。

ドキュメントが次のように変更されました。

    * @exception IndexOutOfBoundsException if index is out of range
    *       (index < 0 || index >= tab count)
これは、次のJTabbedPaneメソッドに適用されます。
    public String getTitleAt(int index)
    public Icon getIconAt(int index)
    public Icon getDisabledIconAt(int index)
    public String getToolTipTextAt(int index)
    public Color getBackgroundAt(int index)
    public Color getForegroundAt(int index)
    public boolean isEnabledAt(int index)
    public Component getComponentAt(int index)
    public int getDisplayedMnemonicIndexAt(int index)
    public Rectangle getBoundsAt(int index)
    public void setTitleAt(int index, String title)
    public void setIconAt(int index, Icon icon)
    public void setDisabledIconAt(int index, Icon icon)
    public void setToolTipTextAt(int index, String toolTipText)
    public void setForegroundAt(int index, Color foreground)
    public void setBackgroundAt(int index, Color background)
    public void setEnabledAt(int index, boolean enabled)
    public void setComponentAt(int index, Component component)
    public void setDisplayedMnemonicIndexAt(int tabIndex, int mnemonicIndex)

同じ例外処理が、以前は何も実行しなかった次のメソッドに追加されました。

    public void setSelectedIndex(int index)
    public void remove(int index)

JTable

DefaultTableModel.moveRowの仕様が明快になった

この変更に関連するバグ追跡レポート: 4144295

JDK 1.3では、DefaultTableModelmoveRowメソッドが明快に説明されていませんでした。つまり、startIndexの行またはendIndexの行がtoIndexで終了するかどうかがはっきり定義されていませんでした。例から類推すると、行を下方に移動するときはstartIndextoIndexで終了し、行を上方へ移動するときはendIndextoIndexで終了することが明白です。

つまり、moveRowの実装にはバグがあります。移動する行が複数になると、行の移動終了の位置は不定であり、移動の後に行が連続しないことさえあります。バグ4144295には、実装が仕様にある例さえも正しく実行しないとあります。実際、moveRow(1, 3, 5)の例は、次の状態でベクトルを残します。

a|C|e|B|D|f|g|h|i|j|k
新しい実装では、この操作は入力から計算できる境界間の要素の単純なローテーションであるとみなします。

以前の実装が作用しなかったため、これまでの定義を単純化する機会が与えられました。startIndexは常にtoIndexに移動し、toIndex以降のすべての要素は元のままの順序に並ぶと定義されました。この定義により、単一行の移動という、前の実装で唯一正しく作用した例と同じ操作が実行されます。

新しい実装では、endIndexstartIndexより小さい場合に例外はスローされません。その代わり、すべての行rを移動する暗黙の規約、つまりstartIndex <= r <= endIndexが満たされても、何も実行されません。

JTableへの入力でフォーカスがセルに転送されるようになった

この変更に関連するバグ追跡レポート: 4274963

Excelアプリケーションでは、ユーザーが英数字キーを押すと、フォーカスが自動的に基盤エディタに移動します。これと同じ動作をJTable内でも実装してほしいという、200を超えるJDC要求がありました。下位互換性を考慮するという理由からデフォルトの動作を変更することはできませんが、この要求に対処するために、このリリースで新しいsurrendersFocusOnKeystrokeプロパティを追加しました。新規メソッドのsetSurrendersFocusOnKeystrokeおよびgetSurrendersFocusOnKeystrokで、この機能がサポートされます。デフォルトの動作は変更されていません。

DefaultTableModelでname引数にnullも指定できるようになった

この変更に関連するバグ追跡レポート: 4474094

これまで、DefaultTableModel.addColumn(Object)メソッドとDefaultTableModel.addColumn(Object, Vector)メソッドでは、name引数にnullを指定することはできず、IllegalArgumentExceptionがスローされていました。コンストラクタを使用したり、フィールドを直接操作したりする方法では列名にnullを設定できるため、addColumnメソッドでもnull値を指定できるように変更されました。


JTree

DefaultTreeModelでnullのルートが使用できるようになった

この変更に関連するバグ追跡レポート: 4264897

DefaultTreeModelでは、nullのルート・ノードが使用できるようになりました。以前、TreeModelのjavadocには、nullのルートは有効であるが、DefaultTreeModelでは許可されないと指定されていました。DefaultTreeModelでは現在、nullのルートが、コンストラクタ内のnullのルートと同様に設定可能です。setRootのjavadocは、この変更を反映して改訂されました。

頭文字ナビゲーションがJTreeへ追加された

この変更に関連するバグ追跡レポート: 4284709

ユーザーにとっては、JTree内で英数字キーを使用してセルをナビゲートしたい場合がしばしば発生します。そのため、getNextMatchメソッドがJTreeに追加されました。BasicTreeUIによって、キーボードでキーが入力されたときにこのメソッドを呼び出すKeyListenerがインストールされます。


JList

ListDataEvent.toStringで有用な情報が提供されるようになった

この変更に関連するバグ追跡レポート: 4134085

開発者はしばしば、有用なデバッグ情報を求めてtoStringを使用します。ただしこれまでは、ListDataEvent toStringメソッドでは、真に有用な情報が提供されませんでした。このリリースで、有用な情報を返すように変更されました。

JListで頭文字キーによるナビゲーションがサポートされるようになった

この変更に関連するバグ追跡レポート: 4284709

ユーザーにとっては、JList内で英数字キーを使用してセルをナビゲートしたい場合がしばしば発生します。このため、getNextMatchJListに追加されました。BasicListUIによって、選択範囲を変更するためにキーが入力されたときにこのメソッドを呼び出すKeyListenerがインストールされます。

JListの項目を水平に配置できるようになった

この変更に関連するバグ追跡レポート: 4460016

これまでJListでは、次のように、セルを垂直にしかレイアウトできませんでした。

1
2
3
4

多くのユーザーが、次に示すように、リストを水平にレイアウトできる機能を求めていました。

1  3
2  4
または
1  2
3  4

この機能を実現するために、VERTICALVERTICAL_WRAP、およびHORIZONTAL_WRAPという3つの定数がJListに追加されました。getLayoutOrientationメソッドと setLayoutOrientationメソッドもJListに追加されました。JListgetScrollableTracksViewportHeightgetScrollableTracksViewportWidthgetScrollableBlockIncrement、およびgetPreferredScrollableViewportSizeの各メソッドについてjavadocが更新されました。同様に、javax.swing.plaf.basic.BasicListUI内のgetPreferredSizeについてのjavadocも更新されました。


その他

Metalのルック・アンド・フィールの2つのデフォルト設定が変更された

Metalのルック・アンド・フィールの2つのデフォルト設定が変更されました。

JColorChooser.setPreviewPanelが古いパネルを削除しない

この変更に関連するバグ追跡レポート: 4759306

このメソッドを呼び出すと、新しいパネルが追加されますが、デフォルトのPreviewPanelがcolorChooserから削除されませんでした。その結果、奇妙なアーティファクトが発生していました。これは1.4.2で修正されました。

JColorChooserのデッドロックが修正されました

この変更に関連するバグ追跡レポート: 4668511

1.4.0で発生したこのバグによって、アプリケーション全体がハングするデッドロックが発生しました。これは1.4.1で修正されました。

JFrame.setDefaultCloseOperationでSecurityExceptionがスローされるようになった

リリース1.4.1から、JFrame内のsetDefaultCloseOperationメソッドでSecurityExceptionをスローできるようになりました。

MetalでMicrosoft Windowsのデスクトップからフォント・サイズを取得できるようになった

この変更に関連するバグ追跡レポート: 4419964および4668963

このリリースより前では、DefaultMetalThemeはWindowsデスクトップのフォント・サイズ情報を無視していました。リリース1.4.1から、DefaultMetalThemeはWindowsデスクトップで指定されているフォント・サイズを使用できます。これは、システム・プロパティswing.useSystemFontSettingsを使用して無効にできます。このバグの一部として、Windowsルック・アンド・フィールでいくつかのコンポーネントに対して誤ったフォントが取得されるバグがありましたが、これは修正されました。

ロケールの一部がWindowsデスクトップのフォント・サイズだけを受け付ける

この変更に関連するバグ追跡レポート: 4615396

Microsoft WindowsのWindowsLookAndFeelでは、特定のロケールはデスクトップのフォント・サイズだけを受け付けます。これは1.4.1で対処されました。

ルック・アンド・フィールが無視できるプロパティについてのドキュメント

この変更に関連するバグ追跡レポート: 4420209

ルック・アンド・フィールの実装の種類によっては、ルック・アンド・フィールに影響を与える可能性がある一定のプロパティを無視することができます。このリリースでは、ある種のルック・アンド・フィールに無視されるプロパティを示すために、一定のメソッドについてのドキュメントが変更されました。また、UIManagerのクラス仕様およびjavax.swing.plaf.metalパッケージのドキュメントが、Java ルック・アンド・フィールをデフォルトのルック・アンド・フィールに指定するために変更されました。この変更は、ドキュメントにだけ影響します。

影響を受けるメソッドには、次のものがあります。

SwingConstantsでNEXTとPREVIOUSを定義するようになった

この変更に関連するバグ追跡レポート: 4175466

SwingConstantsで、Swing全体で使用される定数を定義します。一般的なUI操作に、シーケンス内の次と前の項目の位置指定があります。これは、現在はSwingConstantsで、NEXTおよびPREVIOUSの定数を定義することで指定されます。

Swing以外のコンポーネントからSwingコンポーネントのバインドを処理する新しい方法

この変更に関連するバグ追跡レポート: 4344900

Swingには、特定のキー・ストロークに関連付けられたアクションをサポートする精巧なインフラストラクチャがあります。つまり、ユーザーがある文字を入力すると、該当するアクションが実行されます。これらのイベントの処理は、JComponent.processKeyEvent内から引き起こされます(processKeyEventjava.awt.Componentからオーバーライドされる)。これらのアクションの処理はJComponent内で発生するため、以前は開発者にとって、フォーカスを取得しているJComponent以外のサブクラス内からバインドを処理する方法がありませんでした。このため、processKeyBindingsメソッドがSwingUtilitiesに追加されました。

Swingコンポーネントの音声フィードバック

この変更に関連するバグ追跡レポート: 4290988

注: サウンド・パッケージにいくつかバグがあるため、デフォルトでは、サウンドは再生されません。サウンドを有効にするには、次のようにします。

    UIManager.put("AuditoryCues.playList",
        UIManager.get("AuditoryCues.allAuditoryCues"));

以前のSwingコンポーネントでは、多くのプラットフォームでのネイティブ・コンポーネントとして、同じ音声フィードバックが提供されませんでした。SwingのPLAFへの変更セットであるMALF2は、主として、出力専用のノンスピーチ・オーディオ・ユーザーのフィードバック・メカニズムとしての使用を目的としています。MALF2プロジェクトは、Swing/JFCおよび、基盤プラットフォームでの厳密なユーザー・インタフェース統合という、Javaプラットフォームの目標の視点から重要です。MALF2プロジェクトでは、ネイティブ・アプリケーションとSwing/JFCアプリケーションによるユーザーの経験が、音声によるユーザーへのフィードバックに関して同一であることを保証します。

この実装は、APIをBasicLookAndFeelに追加して、サウンドを再生するActionを含むActionMapのロードをサポートすることが目的としています。これで、サウンドの再生に適切なときに、多様なBasicComponentUIの実装がActionに対してactionPerformedを呼び出します。たとえば、BasicMenuItemUIでは、doClickを使用してアクションを実行します。BasicLookAndFeelがJava Sound APIを使用してサウンドを再生している間に、サブクラスが代替のメソッドを使用することができます。たとえば、WindowsLookAndFeelはWindowsで提供されるサウンドとの統合を図るために、Toolkit.getDefaultToolkit().getDesktopProperty()経由でStringをRunnableにマッピングします。

サウンドを含むActionMapへは、BasicLookAndFeel.getAudioActionMap経由でアクセスできます。getAudioActionMapが最初に呼び出されるときに、次の動作が実行されます。

  1. ロードするサウンドのリストを判断するために、デフォルトのエントリauditoryCues.cueList (Object[])が使用される。
  2. 配列内の各エントリがcreateAudioActionに渡され、サウンドの再生を行うActionを取得する。
  3. BasicLookAndFeel.createAudioActionに渡されたObjectが使用されて、Java Soundでロードできるデフォルトの表からサウンド・ファイルへのパスが検索される。
  4. BasicComponentUIクラスの1つがサウンドの再生を希望したときは、Action内で渡されてBasicLookAndFeel.playSoundが呼び出される。
  5. Actionの名前がデフォルトのエントリAuditoryCues.playListに含まれている場合は、BasicLookAndFeel.playSoundActionactionPerformedを呼び出す。

このアーキテクチャによって、開発者は再生するサウンドをさまざまな方法でカスタマイズできます。

それとは別に、再生するサウンドのセットをデフォルト・エントリのAuditoryCues.playList経由で操作することもできます。このObject配列には、デフォルトの表内で再生するサウンドを示すキーが含まれます。MetalLookAndFeelでは、これを次のように定義します。

new Object[]  {"OptionPane.errorSound", 
          "OptionPane.informationSound",
          "OptionPane.questionSound",
          "OptionPane.warningSound" }
        
この定義は、JOptionPaneがサポートするサウンドのみを有効にする効果があります。

JMenuがフォーカスの新規アーキテクチャが作用するように更新された

この変更に関連するバグ追跡レポート: 4371580

新しいフォーカス・アーキテクチャは、RFE 4290675の要請で導入されました。これにより、フォーカスの一時的な変更を開発者が要求できるようになります。要求は、保護されたComponentrequestFocus(boolean)メソッドまたはrequestFocusInWindow(boolean)メソッドを通じて行われます。この2つのメソッドは、汎用でなくSwingなどの軽量ツールキットのみに対する実装用として保護されています。Swingは、様々なパッケージ内のコードが一時的にフォーカスを要求するという方法でアーキテクチャ化されています。つまり、すべてのSwingコンポーネントの親クラスであるJComponentは、requestFocus(boolean)およびrequestFocusInWindowをpublicとして公開する必要があります。

コンポーネントのツリー内でComponentOrientationを変更する新規サポート

この変更に関連するバグ追跡レポート: 4337186

大量のSwingコンポーネントをComponentOrientationプロパティに注意を払いつつ取り扱う過程で、コンポーネントの階層全体のComponentOrientationの設定を簡単に管理できるようにする2つの機能が必要になります。SwingUtilitiesの新規メソッドであるapplyComponentOrientation(Component c, ComponentOrientation o)を使用すると、コンポーネントの階層全体に一貫したComponentOrientationを設定することが簡単になります。

デスクトップ関連のプロパティへの新規アクセス

この変更に関連するバグ追跡レポート: 4290973

Windowsルック・アンド・フィールの更新の一部として、メソッドがLookAndFeelgetDesktopPropertyValueに追加され、デスクトップ関連のプロパティにアクセスしやすくなりました。

コンポーネントのイン・セットによるオフセット矩形に対する新規メソッド

このメソッドは、実際には不確定な状態をサポートするために、JProgressBarの更新の一部として追加されました。この変更に関連するバグ追跡レポート: 4290717

新しいメソッドは、calculateInnerArea(Component, Rectangle)で、SwingUtilitiesに追加されました。

マウス・ホイールのための新規API

この変更に関連するバグ追跡レポート: 4356268

マウスの中央ボタンとしてスクロール・ホイールが付いたホイール・マウスは、一般的になりつつあります。この提案では、マウス・ホイールを使用してスクロールさせる組込みのJavaサポートのほかに、新しいホイール・イベント・リスナーも提供されるので、マウス・ホイールの動作を開発者がカスタマイズできるようになります。

新しいクラスであるMouseWheelListenerと、新しいインタフェースであるMouseWheelEventが追加されました。定数のMOUSE_WHEEL_EVENT_MASKAWTEventに追加されました。AWTEventMulticasterには、mouseWheelMovedadd、およびremoveの3つの新しいメソッドがあります。Componentには、addMouseWheelListenerおよびremoveMouseWheelListenerの2つの新しいメソッドがあります。ScrollPaneにも、setWheelScrollingEnabledおよび isWheelScrollingEnabledの2つの新しいメソッドがあります。最後に、Robotには、新しいmouseWheelメソッドがあります。

JFrame、JDialog、およびJAppletがprocessKeyEventをオーバーライドしなくなった

この変更に関連するバグ追跡レポート: 4462408

Swingは、JComponentにキー・バインディングを登録するオプションをサポートしています。以前のリリースでは、Swingのトップ・レベルのコンポーネント(JFrameJDialog、およびJApplet)の1つにフォーカスがある場合、キー・バインディングを有効にするには、これらのトップ・レベルのコンポーネントでprocessKeyEvent (java.awt.Componentで定義されている)をオーバーライドする必要がありました。java.awt.KeyEventPostProcessorが追加され、Swingでこれを利用することにより(RFE 4389332)、Swingのトップ・レベルのコンポーネントでこれらのメソッドをオーバーライドする必要はなくなりました。このリリースでは、これらのメソッドはトップ・レベルから削除され、継承されるようになりました。

JWindowコンストラクタのヘッドレス例外に関するドキュメント

この変更に関連するバグ追跡レポート: 4483258

このリリースではヘッドレス・モードが追加されましたが、JWindowの2つのコンストラクタで、HeadlessExceptionがスローされる可能性が示されていませんでした。Window(Window, GraphicsConfiguration)およびJWindow(GraphicsConfiguration)のドキュメントで、この点が修正されました。

入力ベリファイアの既知のバグ

この変更に関連するバグ追跡レポート: 4532517

一部のユーザーに問題を発生させている入力ベリファイアのバグが最近発見されました。1.4のshouldYieldFocusメソッドでは、OptionPaneをポップアップさせるなどの副作用は許可されません。

これには、次のような回避策があります。

    public boolean shouldYieldFocus(JComponent input) {
      if (verify(input)) {
        return true;
      }

      // According to the documentation, should yield focus is allowed to cause
      // side effects.  So temporarily remove the input verifier on the text
      // field.
      input.setInputVerifier(null);
      System.out.println("Removed input verifier");

      // Pop up the message dialog.
      String message = "Roll over the 'JButton1' with mouse pointer "
        + "after closing this dialog.\nIt sometimes behaves correctly "
        + "for the first time\n but repeating action brings incorrect "
        + "behaviour of button.";
      JOptionPane.showMessageDialog(null, message , "invalid value", 
        JOptionPane.WARNING_MESSAGE);
      System.out.println("Showed message.");

      // Reinstall the input verifier.
      input.setInputVerifier(this);
      System.out.println("Reinstalled input verifier");

      // Tell whomever called us that we don't want to yield focus.
      return false;
    }

     

既知のバグ

Windowsとリモート表示アプリケーションを同時に実行する場合のフォーカス・バグ

状況によっては、フォーカスできない重量ウィンドウを表示するとフォーカスが失われることがあります。これは、具体的にはWindowsのフレーバとReflection-Xなどのリモート表示アプリケーションを同時に実行する場合に発生します。このバグはリリース1.4で報告されましたが、1.4.1では修正されました。詳細は、バグ4628933を参照してください。

JRootPane

RootPaneUIの複数の新規実装

この変更に関連するバグ追跡レポート: 4338458

javax.swing.plaf.multi内のクラスは、複数のルック・アンド・フィールを多重化するために使用されます。このクラスは通常、聴覚情報などの追加情報を提供するための補助ルック・アンド・フィールを使用するユーザー補助機能として使用されます。現在のところ、補助ルック・アンド・フィールの使用を不安定にするRootPaneUIの複数の実装はありません。

新規クラスのjavax.swing.plaf.multi.MultiRootPaneUIが追加されました。

ウィンドウ装飾を提供するルック・アンド・フィールのサポート

この変更に関連するバグ追跡レポート: 4290471

AWTでは最近、Windowの装飾を取り除くAPIを提供しました。つまり、非装飾に設定されている場合、ウィンドウを閉じたり、移動したり、サイズを変更したりするときに、Windowはどのようなウィジェットも描画もしません。その意味で、Swingではルック・アンド・フィール機能がウィンドウの装飾を描画できるようになりました。

この機能は主としてjavax.swing.JRootPaneでサポートされますが、javax.swing.JFrameおよびjavax.swing.JDialogで提供されるスイッチを使用することをお薦めします。

次の変更がJRootPaneに対して行われました。

    public static final int NONE;
    public static final int FRAME;
    public static final int PLAIN_DIALOG;
    public static final int INFORMATION_DIALOG;
    public static final int ERROR_DIALOG;
    public static final int COLOR_CHOOSER_DIALOG;
    public static final int FILE_CHOOSER_DIALOG;
    public static final int QUESTION_DIALOG;
    public static final int WARNING_DIALOG;

    public void setWindowDecorationStyle(int style)
    public int getWindowDecorationStyle()

すべてのルック・アンド・フィールがウィンドウの装飾スタイルをサポートするわけではないので、getSupportsWindowDecorationsメソッドがjavax.swing.LookAndFeelに追加されて、ルック・アンド・フィールがこの動作をサポートするかどうかを示す方法が提供されました。

isDefaultLookAndFeelDecorated()およびsetDefaultLookAndFeelDecoratedメソッドがJFrameに追加されました。

また、isDefaultLookAndFeelDecorated()およびsetDefaultLookAndFeelDecoratedメソッドがJDialogに追加されました。


JScrollBar

JScrollBarがsetUIをオーバーライドするようになった

この変更に関連するバグ追跡レポート: 4213298

JScrollBarは以前、setUIメソッドをオーバーライドしませんでした。このリリースでは、オーバーライドするように変更されました。


JScrollPane

JScrollPaneの新規MouseWheelListenerのサポート

これは、マウス・ホイールのサポートの一部として実装されました。ここでは、JScrollPaneに対する変更だけを説明します。その他の変更に関する詳細は、このセクションを参照してください。この変更に関連するバグ追跡レポート: 4356268

isWheelScrollingEnabledおよびsetWheelScrollingEnabledメソッドがJScrollPaneに追加されました。

新しいprotected内部クラスのMouseWheelHandlerjavax.swing.plaf.basic.BasicScrollPaneUIに追加されました。この内部クラスに関連するメソッドは、mouseWheelMovedです。また、新しいcreateMouseWheelListenerメソッドがBasicScrollPaneUIに追加されました。


RepaintManager

新規VolatileImageのサポート

この変更に関連するバグ追跡レポート: 4363288

Java 2Dチームでは、Imageのグラフィックスとスクリーン組立て操作にハードウェア高速化を利用できる、新しいVolatileImageメカニズムを実装しました。

特に指定しないかぎり、Swingはダブル・バッファを使用してGUIコンポーネントの内容をペイントします。これは、オフスクリーン・イメージへ描画して、その後そのイメージをスクリーンにコピーすることで行われます。この過程が、新しいVolatileImageサポートを利用するために変更されました。

ペイントを実行するためにSwingが使用するダブル・バッファは、getOffscreenBufferメソッドを使用してRepaintManagerから取得します。VolatileImageオブジェクトには失敗条件をテストするための特殊な操作が必要なため、VolatileImageを返すこのメソッドを簡単に変更することはできませんでした。それは、このメソッドを呼び出す既存のコードが存在する可能性があり、この追加の処理が実装されていないためです。したがって、特にVolatileImageオブジェクトを返すために、getVolatileOffscreenBufferメソッドがjavax.swing.RepaintManagerに追加されました。


SpringLayout

新しいSpringLayoutクラス

この変更に関連するバグ追跡レポート: 4290203

このリリースでは、新しいレイアウト・マネージャSpringLayoutが導入されました。

SpringLayoutの使用例については、「The Java Tutorial」の「How to Use SpringLayout」を参照してください。


Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.