Java

JavaTM 2 SDK, Standard Edition, v 1.4 에서의 Swing 의 변경점 및 신기능

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 의 변경은,Java Developer Connection (JDC) Bug Parade 에 있는 리포트에의 링크와 관련지을 수 있고 있습니다. 이 사이트에서, 변경의 이유가 된 버그나 RFE (기능확장의 요구)를 참조할 수가 있습니다. 이 문서에는, 각 API 의 변경에 대한 이하의 정보도 포함되어 있습니다.

섹션


Box

Box 가 JComponent 로부터 파생하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4304100 .

종래,Box 의 슈퍼 클래스는 Component 였습니다. BoxJComponent 로부터 파생하지 않았기 때문에, 예를 들어, 경계를 설정하거나revalidate 를 발행하는 등으로, 일반적으로의 Swing 컴퍼넌트와 같이 Box 를 사용할 수 없었습니다. 이것에 한정하지 않고, 시각적인 변경이나 그 외의 동일한 시각상의 프로퍼티의 변경에서도, 표준적인 Swing 컴퍼넌트는 일반적으로,repaint 또는 revalidate 를 사용해 변경합니다만,Box 는 이 동작에 적합하지 않았습니다. 이 릴리스로부터,BoxBox.FillerJComponent 슈퍼 클래스로부터 파생하므로, 표준 Swing 컴퍼넌트에 의해 가까운 동작을 합니다.

BoxLayout 가 오른쪽에서 왼쪽, 및 아래에서 위에의 컴퍼넌트의 방향을 지원하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4140833 .

BoxLayout 에서는, 레이아웃 하는 ContainerComponentOrientation 가 고려되지 않았습니다. 다른 AWT 레이아웃 매니저는, JDK 1.2 에 ComponentOrientation 기능이 추가되었을 때에, 컴퍼넌트의 방향을 고려하도록(듯이) 작성되었습니다. 이 기능을 BoxLayout 에 추가하면(자), 중동 로케일을 지원하는 프로그램으로 도움이 됩니다. BoxLayout 는,JOptionPane,JToolBar,JMenuBar 등의, 그 외의 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.setDisplayedMnemonicIndexJLabel.setDisplayedMnemonicIndex 로 해결할 수 있습니다. setMnemonic 또는 setDisplayedMnemonic 메소드로 니모닉크를 지정하면(자),setDisplayedMnemonicIndex 메소드로, 강조 표시되는 문자를 변경할 수 있습니다. 게다가 새로운 AbstractButton.getDisplayedMnemonicIndexJLabel.getDisplayedMnemonicIndex 메소드가 있습니다. 또,drawStringUnderlineCharAtjavax.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 .

combobox의 드롭 다운 메뉴가 pop-up 되거나 바탕으로 되돌려지거나 삭제되거나 할 경우에 청취자에게 통지되는 기능의 지원를, 많은 개발자가 요구하고 있었습니다. 어플리케이션에서는, 이러한 청취자를 사용해, combobox의 모델을 각 항목과 함께 생성할 수가 있었습니다.

이 기능은, Look & Feel 의 구현의 몇개인가로 제공되지 않을 가능성이 있는 드롭 다운 메뉴 기능용으로 청취자를 지원하는 것에 대하여, 어떠한, 어쩌면 아카데믹한 염려가 있었기 때문에, 초기 버젼의 Swing 에는 제공되지 않았습니다. 그러나, Java 와 함께 출시되는 모든 Look & Feel 와 다른 모든 Look & Feel 에서도, combobox의 모든 항목을 표시하기 위해서 드롭 다운 메뉴가 사용되고 있습니다. 그 때문에, 메뉴 상태의 변경 통지를 취득하기 위해서, 이식성이 없는 핵에 의지하는 개발자도 있었습니다.

이 릴리스에서는,PopupMenuListenerJComboBox 에 추가되었습니다. 기반이 되는 Look & Feel 가 항목 메뉴를 지원하고 있는 한, 이 청취자를 사용해, combobox의 메뉴가 표시되는 전후에 액션을 실행할 수 있습니다. 이 기능을 지원하려면 ,JComboBox 의 이하의 신규 메소드가 필요합니다.

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

JComboBox 가 리스트용의 prototype의 셀을 지원하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4231298 .

지금까지 JComboBox 는, 표시하는 각 항목의 렌 다라를 구성해 있었습니다. 리스트가 큰 경우, 이 구성 방법은 시간이 걸립니다. 개발자가 대신에 필요로 하고 있던 것은, 모든 셀에 일치하는 prototype를 지정해, 그 prototype만이 각 셀 대신에 1 회만 체크되는 것 같은 기능이었습니다. 이 릴리스에서는,getPrototypeDisplayValuesetPrototypeDisplayValueJComboBox 에 추가되었습니다.

JComboBox 및 관련 클래스에 대한 Javadoc 문서가 개선되었다

이 변경에 대응하는 버그 추적 리포트는,4394300 입니다.

지금까지,JComboBox 의 public API 와 그 UI 위양에는, 그 구현 방법을 상세하게 설명한 javadoc 가 포함되어 있었습니다. 다만, 시간의 경과와 함께 기능의 재고와 버그의 수정을 거쳐, 이 javadoc 는 시대착오가 되었습니다. 구현의 상세하지 않게 메소드의 동작을 설명하도록(듯이), javadoc 의 체크와 개정을 했습니다. 또, 실제로는 비공개여야할 「protected」메소드나 필드에 관해서는, 이러한 메소드의 오버라이드(override)나 호출을 장려하지 않게, javadoc 가 몇개인가 삭제되었습니다.

그 때문에,JComboBox ,ComboBoxModel ,MutableComboBoxModel ,javax.swing.plaf.basic.BasicComboBoxUI ,javax.swing.plaf.basic.ComboPopup , 및 javax.swing.plaf.basic.BasicComboPopup 의 javadoc 가 변경되었습니다.


JFileChooser

Windows Look & Feel 에서의 JFileChooser 의 개선

이 변경에 대응하는 버그 추적 리포트는,4290709 입니다.

Swing 의 JFileChooser 는, Windows Look & Feel 에 근거한 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 로부터 삭제되었으므로, 그 슈퍼 클래스의 구현이 사용됩니다.

createListSelectionListenerjavax.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 입니다.

Look & Feel 에서는,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 release 의 JFileChooser 로 복수의 파일을 선택할 수 있게 되었습니다. 다만,setMultiSelectionEnabled 의 javadoc 는 1.4. 1 릴리스까지 갱신되고 있지 않습니다.


JInternalFrame

JInternalFrame 에서는, 너무 긴 타이틀을 절약하게 되었다

이 변경에 대응하는 버그 추적 리포트는, 4134077 입니다.

이전에는, 내부 프레임의 타이틀이 너무 긴 경우에서도, 클립 되지 않았습니다. 또, 타이틀이 아이콘 부분 우에에 겹쳐 표시되어 타이틀이 클립 된 것을 사용자가 시각적으로 검토할 수 없었습니다. 이 문제를 해결하기 위해서,BasicInternalFrameTitlePane.getTitle 가 추가되었습니다.

Windows Look & Feel 내의 JInternalFrame 의 타이틀이 그라데이션 첨부로 draw 되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4389209 .

이것을 올바르게 구현하려면 ,com.sun.java.swing.plaf.windows.WindowsInternalFrameTitlePane 클래스를 작성할 필요가 있었습니다. 이 클래스는 javax.swing.plaf.basic.BasicInternalFrameTitlePane 의 확장입니다만, 적절한 경우에 그라데이션을 draw 하기 위해서, 페인트 루틴이 오버라이드(override) 되고 있습니다. 종래의 코드를 재사용하는 가장 적절한 방법은, 백그라운드만을 페인트 하는 부분을 페인트 메소드로부터 분리해,WindowsInternalFrameTitlePane 내에서 그 부분을 오버라이드(override) 하는 것입니다. paintTitleBackground 메소드가 javax.swing.plaf.basic.BasicInternalFrameTitlePane 에 추가되었습니다.


JTextComponent

JEditorPane 내의 이미지용의 툴팁에 대한 신규 지원

이 변경에 관련하는 버그 추적 리포트: 4252169 .

이전의 릴리스에서는,JEditorPane 내에서 이미지를 draw 하는 ViewImageView 가 툴팁의 텍스트를 표시할 수 없었습니다. 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 가 오버라이드(override) 되어 그 AttributeSet 의 ALT 속성으로부터 값이 돌려주어집니다.

ImageView 클래스가 public 가 되었다

이 변경에 관련하는 버그 추적 리포트: 4233811 .

패키지의 비공개 클래스에서 만난 javax.swing.text.html.ImageView 가 공개되었으므로, 이 클래스를 확장할 수가 있게 되었습니다.

HyperlinkEvent 의 읽기 전용 신규 프로퍼티 elementOffset

이 변경에 관련하는 버그 추적 리포트: 4182124 .

HTML 패키지에서는, 마우스가 링크상을 이동한 것을 HyperlinkEventHyperlinkListener 클래스 경유로 검출할 방법이, 개발자에게 공개되었습니다. 개발자에게 있어서는,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 )의 시멘틱스가, NetscapeTM 나 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 .

J2SETM 로 제공된 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 는, 요구가 문서의 마지막에 편집된 스포트 (갭)를 넘지 않는 한, 요구를 효율적으로 구현할 수 있었습니다. 내용에의 효율적인 액세스를 촉진하기 위해서,setPartialReturnisPartialReturn 메소드가 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 에 추가되었습니다. 이 메소드로부터 removeinsertString (Document 를 변경하기 위한 인터페이스에 정의되고 있는 메소드는 이 2 개(살)만)를 호출할 수가 있도록(듯이),writeLock 를 호출하기 위한 제약이 완화되었습니다. 이 때문에,replace 메소드는,removeinsertString 를 오버라이드(override) 할 뿐(만큼)의, 낡은 버젼의 AbstractDocument 와도 호환성이 있습니다.


JOptionPane

신규 showInputDialog 메소드

이 변경에 관련하는 버그 추적 리포트: 4226644 .

지난 번의 릴리스에서는, 디폴트의 캐릭터 라인 첨부의 텍스트 필드를 포함한 단순한 입력 다이알로그 박스를 표시하려고 하는 경우, 7 개의 파라미터가 필요한, 복잡한 JOptionPane.showInputDialog 메소드를 호출할 필요가 있었습니다. 새로운 2 개의 showInputDialog(Object, Object)showInputDialog(Component, Object, Object) 메소드에서는, 단순한 입력 다이알로그 박스의 작성과 표시가 보다 편리하게 되었습니다.

JOptionPane 로 ComponentOrientation 가 지원되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4265463 .

JOptionPane 에서는, 오른쪽으로부터 왼쪽향의 레이아웃이 필요했습니다. 이 변경은 버그의 수정이며 실제의 API 는 필요 없습니다만,JOptionPanejavax.swing.plaf.basic.BasicOptionPane 의 클래스 스펙이 갱신되었습니다.

JOptionPane 로 사이즈 변경할 수 없는 다이얼로그가 사용되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4829588 .

릴리스 1.4. 0 으로부터, 사이즈 변경할 수 없는 다이얼로그를 사용하기 위해서 JOptionPane 가 변경되었습니다. 그 결과, 많은 JOptionPane 메소드에 의해 표시되는 다이얼로그가 다소 변화하게 되었습니다. 최초의 2 개의 변경이 필요합니다.

여분으로 긴 텍스트를 처리할 경우에 이 변경의 부작용이 발생합니다. 이전에는, 다이얼로그의 사이즈는 화면 사이즈에 제한되기 (위해)때문에, 긴 텍스트는 마지막에 「...」(이)가 표시되어 절약할 수 있었습니다. 현재는, 여분으로 긴 텍스트가 원인으로, 모든 텍스트를 거두기 위해서(때문에) 다이얼로그의 사이즈가 화면 사이즈보다 길어지는 일이 있습니다. 버그 4829588 을 계속적으로 참조해, 이 바람직하지 않은 동작이 해결되었는지의 여부를 확인해 주세요.

JPopupMenu

JPopupMenu 및 포커스

이 릴리스로부터,JPopupMenu 를 표시하면(자) 부모의 JRootPane 에 포커스가 이동하게 되었습니다. 이 변경은,JPopupMenu 로 키보드 traversal를 지원하기 위해서 행해졌습니다 (4212563 ). 이것에 의해, 포커스를 잃었는지의 여부를 검증하는 어플리케이션으로 문제가 발생합니다. 이것에 의해 영향을 받는 경우는,focusLost 통지로 FocusEvent 의 일시적인 프로퍼티을 체크해,true 의 경우는 아무것도 실시하지 않는다, 로 하는 것을 추천합니다. JPopupMenu 에 포커스가 이동하는 것이 바람직하지 않은 경우, 현재의 릴리스에서는 이 이동을 무효로 할 수 없습니다. 릴리스 1.4. 1 에서는, 포커스를 이동할지 어떨지의 결정은,JPopupMenu 의 포커스 가능성에 근거하고 있습니다. 자세한 것은, 버그 4632782 를 참조해 주세요.

JPopupMenu 로 키 바인드가 지원되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4212563 .

이전에는,JPopupMenu 로 키 바인드는 지원되지 않았습니다. 커서 키, 니모닉크, Enter 키, 및 Esc 키는,JPopupMenuJMenuJComboBox 와 같은 복합 컴퍼넌트의 일부로서 사용되지 않는 이상JPopupMenu 에는 작용하지 않았습니다.

이 동작은,JPopupMenu 에는 항상 포커스를 맞힐 수 있는 두, 그 때문에 KeyEvents 를 취득하지 못하는 것에 원인이 있습니다. 이전의 릴리스에서는, Swing 와 같은 경량의 툴 킷이 포커스를 요구해, 포커스의 변경이 일시적인 것을 나타내는 것은 불가능했습니다. 새로운 포커스의 아키텍쳐(architecture)에 의해 이 문제가 해결되어 Swing 로 일시적인 포커스의 변경을 요구할 수 있게 되었습니다. 이 버그를 수정하려면 ,JPopupMenu 에 포커스를 취득시켜, 키 바인드가 처리되도록(듯이) 할 필요가 있었습니다. 포커스가 변경되는 것을 지금까지 기대하고 있지 않았던 컨슈머(consumer)는, 코드를 갱신해,FocusEvent 의 일시적인 프로퍼티을 체크할 필요가 있습니다.

JPopupMenu.setVisible(true)가 헷드레스모드로 HeadlessException 를 throw 하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4401222 .

헷드레스모드가 신규에 도입되었을 때,JPopupMenu.setVisible(true) 는 헷드레스모드로 불려 가면(자) NullPointerException 를 throw 하도록(듯이) 구현되었습니다. 이 릴리스로부터는 HeadlessException 를 throw 하도록(듯이) 변경되어 헷드레스모드에서는 실행할 수 없는 조작인 것을 나타내게 되었습니다.


JPanel

신규의 setUI 및 getUI 메소드

이 변경에 관련하는 버그 추적 리포트: 4226238 .

setUI /getUI 메소드는, 그 Look & Feel 가 플러그 인 가능한 Look & Feel (plaf)로 정의되는 경우에서도,JPanel 에 구현되고 있지 않았습니다. 예를 들어,javax.swing.plaf.basic.BasicPanelUI.java 를 참조해 주세요.


JTabbedPane

JTabbedPane 및 포커스

새로운 포커스의 스펙에서는, 표시되어 있지 않은 컴퍼넌트에서의 포커스 요구는 실패합니다. 이것에 의해, 다소의 부작용이 발생합니다. 1 개의 부작용으로서JTabbedPane 에 관련지을 수 있고 있는 ChangeListener 로부터의 포커스 요구가 실패할 가능성이 있습니다. 또, 컴퍼넌트가 현재 표시되어 있지 않기 때문에, 이전의 릴리스에서는 포커스 요구가 기능하고 있던 상황으로 포커스 요구가 실패하는 것이 ChangeListener 에 통지됩니다. JTabbedPane 로 이 상황이 발생했을 경우는, 포커스를 요구하기 전에 컴퍼넌트를 표시하는 것을 추천합니다. 그 외의 상황에서는, 다를 방법이 필요한 경우가 있습니다.

JTabbedPane 내의 신규 indexAtLocation 메소드

이 변경에 관련하는 버그 추적 리포트: 4241787 .

이 변경 이전에는, 클라이언트 프로그램에, 좌표로 가리키는 위치를 탭 첨부 페인내의 특정의 탭에 변환하는 방법이 없었습니다. 이 때문에,JTabbedPane 로 탭 위에 메뉴를 pop-up 시키는 등의 특수한 이벤트 처리를 구현하는 것이 곤란했습니다.

indexAtLocation 메소드가 JTabbedPane 에 추가되었습니다.

JTabbedPane 내의 탭에 액세스하기 위한 신규 니모닉크사포트

이 변경에 관련하는 버그 추적 리포트: 4284674 .

JTabbedPane 의 각 페인에서는, 이전에는 니모닉크를 사용할 수 없었습니다. 이 문제의 해결을 위해서(때문에),getDisplayedMnemonicIndexAtsetDisplayedMnemonicIndexAt 가 추가되었습니다.

JTabbedPane 에 throw 되는 예외에 일관성이 생겼다

이 변경에 관련하는 버그 추적 리포트: 4287053 .

JTabbedPane 클래스는, 많은 메소드를 보유하는 컨테이너이며, 파라미터로서 정수의 인덱스를 취합니다. 이러한 메소드에는, 유감스럽게 예외의 throw에 일관성이 없었습니다 (체크/throw 하는 메소드도 있으면, 하지 않는 메소드도 있다). 게다가 javadoc 에도 잘못이 있어, 기반이 되는 Vector 에 의해 실제로는 ArrayIndexOutOfBoundsException 가 throw 되는 경우에,IllegalParameterException 가 throw 된다고 기술되고 있었습니다.

0 으로부터 「탭수 - 1」까지의 유효한 범위내에 없으면 안 되는 인덱스를 취하는 모든 메소드는, 현재는,IndexOutOfBoundsException 를 throw 한다고 기술되고 있습니다 (주 - 호환성을 취한다고 하는 이유로부터, 기반의 코드에서는 계속해 ArrayIndexOutOfBoundsException 가 throw 된다).

문서가 다음과 같이 변경되었습니다.

    * @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 보다 작은 경우에 예외는 throw 되지 않습니다. 그 대신해, 모든 행 r 를 이동하는 암묵의 규약, 즉 startIndex <= r <= endIndex 가 채워져도, 아무것도 실행되지 않습니다.

JTable 에의 입력으로 포커스가 셀에 전송 되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4274963 .

Excel 어플리케이션에서는, 사용자가 영숫자 키를 누르면(자), 포커스가 자동적으로 기반 에디터로 이동합니다. 이것과 같은 동작을 JTable 내에서도 구현 해 주었으면 한다고 하는, 200 을 넘는 JDC 요구가 있었습니다. 하위 호환성을 고려한다고 하는 이유로부터 디폴트의 동작을 변경할 수 없습니다만, 이 요구에 대처하기 위해서, 이 릴리스로 새로운 surrendersFocusOnKeystroke 프로퍼티을 추가했습니다. 신규 메소드의 setSurrendersFocusOnKeystrokegetSurrendersFocusOnKeystrok 로, 이 기능이 지원됩니다. 디폴트의 동작은 변경되고 있지 않습니다.

DefaultTableModel 로 name 인수에 null 도 지정할 수 있게 되었다

이 변경에 관련하는 버그 추적 리포트: 4474094 .

지금까지,DefaultTableModel.addColumn(Object) 메소드와 DefaultTableModel.addColumn(Object, Vector) 메소드에서는,name 인수에 null 를 지정하지 못하고,IllegalArgumentException 가 throw 되고 있었습니다. 생성자 을 사용하거나 필드를 직접 조작하거나 하는 방법에서는 렬명에 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 를 사용합니다. 다만 지금까지는,ListDataEventtoString 메소드에서는, 실로 유용한 정보가 제공되지 않았습니다. 이 릴리스로, 유용한 정보를 돌려주도록(듯이) 변경되었습니다.

JList 로 머리 글자 키에 의한 네비게이션이 지원되게 되었다

이 변경에 관련하는 버그 추적 리포트: 4284709 .

사용자에게 있어서는,JList 내에서 영숫자 키를 사용해 셀을 안내하고 싶은 경우가 자주 발생합니다. 이 때문에,getNextMatchJList 에 추가되었습니다. BasicListUI 에 의해, 선택 범위를 변경하기 위해서 키가 입력되었을 때에 이 메소드를 호출하는 KeyListener 가 인스톨 됩니다.

JList 의 항목을 수평에 배치할 수 있게 되었다

이 변경에 관련하는 버그 추적 리포트: 4460016 .

지금까지 JList 에서는, 다음과 같이, 셀을 수직 밖에 레이아웃 할 수 없었습니다.

1
2
3
4

많은 사용자가, 다음에 나타내도록(듯이), 리스트를 수평에 레이아웃 할 수 있는 기능을 요구하고 있었습니다.

1  3
2  4
또는
1  2
3  4

이 기능을 실현하기 위해서(때문에),VERTICAL ,VERTICAL_WRAP , 및 HORIZONTAL_WRAP 라고 하는 3 개의 정수가 JList 에 추가되었습니다. getLayoutOrientation 메소드와 setLayoutOrientation 메소드도 JList 에 추가되었습니다. JListgetScrollableTracksViewportHeight ,getScrollableTracksViewportWidth ,getScrollableBlockIncrement , 및 getPreferredScrollableViewportSize 의 각 메소드에 대해 javadoc 가 갱신되었습니다. 같이javax.swing.plaf.basic.BasicListUI 내의 getPreferredSize 에 대한 javadoc 도 갱신되었습니다.


그 외

Metal 의 Look & Feel 의 2 개의 디폴트 설정이 변경되었다

Metal 의 Look & Feel 의 2 개의 디폴트 설정이 변경되었습니다.

JColorChooser.setPreviewPanel 가 낡은 패널을 삭제하지 않는다

이 변경에 관련하는 버그 추적 리포트: 4759306 .

이 메소드를 호출하면(자), 새로운 패널이 추가됩니다만, 디폴트의 PreviewPanel 가 colorChooser 로부터 삭제되지 않았습니다. 그 결과, 불필요한 산물을 남기고 있었습니다. 이것은 1.4. 2 로 수정되었습니다.

JColorChooser 의 데드락이 수정되었습니다

이 변경에 관련하는 버그 추적 리포트: 4668511 .

1.4. 0 으로 발생한 이 버그에 의해, 어플리케이션 전체가 헹 하는 데드락이 발생했습니다. 이것은 1.4. 1 으로 수정되었습니다.

JFrame.setDefaultCloseOperation 로 SecurityException 가 throw 되게 되었다

릴리스 1.4. 1 으로부터,JFrame 내의 setDefaultCloseOperation 메소드로 SecurityException 를 throw 할 수 있게 되었습니다.

Metal 로 Microsoft Windows 의 데스크탑으로부터 font size를 취득할 수 있게 되었다

이 변경에 관련하는 버그 추적 리포트: 4419964 4668963

이 릴리스보다 전에서는,DefaultMetalTheme 는 Windows 데스크탑의 font size 정보를 무시하고 있었습니다. 릴리스 1.4. 1 으로부터,DefaultMetalTheme 는 Windows 데스크탑으로 지정되고 있는 font size를 사용할 수 있습니다. 이것은, 시스템 프로퍼티 swing.useSystemFontSettings 를 사용해 무효로 할 수 있습니다. 이 버그의 일부로서 Windows Look & Feel 로 몇개의 컴퍼넌트에 대해서 잘못한 폰트가 취득되는 버그가 있었습니다만, 이것은 수정되었습니다.

로케일의 일부가 Windows 데스크탑의 font size만을 받아들인다

이 변경에 관련하는 버그 추적 리포트: 4615396 .

Microsoft Windows 의 WindowsLookAndFeel 에서는, 특정의 로케일은 데스크탑의 font size만을 받아들입니다. 이것은 1.4. 1 으로 수정되었습니다.

Look & Feel 를 무시할 수 있는 프로퍼티에 대한 문서

이 변경에 관련하는 버그 추적 리포트: 4420209 .

Look & Feel 의 구현의 종류에 따라서는, Look & Feel 에 영향을 줄 가능성이 있는 일정한 프로퍼티을 무시할 수가 있습니다. 이 릴리스에서는, 어떤 종류의 Look & Feel 에 무시되는 프로퍼티을 나타내기 위해서(때문에), 일정한 메소드에 대한 문서가 변경되었습니다. 또,UIManager 의 클래스 스펙 및 javax.swing.plaf.metal 패키지의 문서가, Java Look & Feel 를 디폴트의 Look & Feel 로 지정하기 위해서(때문에) 변경되었습니다. 이 변경은, 문서에만 영향을 줍니다.

영향을 받는 메소드에는, 다음의 것이 있습니다.

SwingConstants 로 NEXT 와 PREVIOUS 를 정의하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4175466 .

SwingConstants 로, Swing 전체로 사용되는 정수를 정의합니다. 일반적인 UI 조작에, 순서내의 다음과 전의 항목의 위치 지정이 있습니다. 이것은, 현재는 SwingConstants 로,NEXTPREVIOUS 의 정수를 정의하는 것으로 지정됩니다.

Swing 이외의 컴퍼넌트로부터 Swing 컴퍼넌트의 바인드를 처리하는 새로운 방법

이 변경에 관련하는 버그 추적 리포트: 4344900 .

Swing 에는, 특정의 키스트로크(keystroke)에 관련지을 수 있었던 액션을 지원하는 정교한 인프라스트럭쳐(infrastructure)가 있습니다. 즉, 사용자가 있는 문자를 입력하면(자), 해당하는 액션이 실행됩니다. 이러한 이벤트의 처리는,JComponent.processKeyEvent 내로부터 일으켜집니다 (processKeyEventjava.awt.Component 로부터 오버라이드(override) 된다). 이러한 액션의 처리는 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 를 호출한다.

이 아키텍쳐(architecture)에 의해, 개발자는 재생하는 사운드를 다양한 방법으로 커스터마이즈 할 수 있습니다.

그것과는 별도로, 재생하는 사운드세트를 디폴트 엔트리의 AuditoryCues.playList 경유로 조작할 수도 있습니다. 이 Object 배열에는, 디폴트의 테이블내에서 재생하는 사운드를 나타내는 키가 포함됩니다. MetalLookAndFeel 에서는, 이것을 다음과 같이 정의합니다.

new Object[]  {"OptionPane.errorSound", 
	  "OptionPane.informationSound",
	  "OptionPane.questionSound",
	  "OptionPane.warningSound" }
	
이 정의는,JOptionPane 가 지원하는 사운드만을 유효하게 하는 효과가 있습니다.

JMenu 가 포커스의 신규 아키텍쳐(architecture)가 작용하도록(듯이) 갱신되었다

이 변경에 관련하는 버그 추적 리포트: 4371580 .

새로운 포커스 아키텍쳐(architecture)는, RFE 4290675 의 요청으로 도입되었습니다. 이것에 의해, 포커스의 일시적인 변경을 개발자가 요구할 수 있게 됩니다. 요구는, 보호된 ComponentrequestFocus(boolean) 메소드 또는 requestFocusInWindow(boolean) 메소드를 통해서 행해집니다. 이 2 개의 메소드는, 범용이 아니고 Swing 등의 경량 툴 킷에만 대하는 구현용으로서 보호되고 있습니다. Swing 는, 다양한 패키지내의 코드가 일시적으로 포커스를 요구한다고 하는 방법으로 아키텍쳐(architecture)화 되고 있습니다. 즉, 모든 Swing 컴퍼넌트의 친클래스인 JComponent 는,requestFocus(boolean)requestFocusInWindow 를 public 로서 공개할 필요가 있습니다.

컴퍼넌트의 트리내에서 ComponentOrientation 를 변경하는 신규 지원

이 변경에 관련하는 버그 추적 리포트: 4337186 .

대량의 Swing 컴퍼넌트를 ComponentOrientation 프로퍼티에 주위를 기울이면서 취급하는 과정에서, 컴퍼넌트의 계층 전체의 ComponentOrientation 의 설정을 간단하게 관리할 수 있도록(듯이) 하는 2 개의 기능이 필요하게 됩니다. SwingUtilities 의 신규 메소드인 applyComponentOrientation(Component c, ComponentOrientation o) 를 사용하면(자), 컴퍼넌트의 계층 전체에 일관한 ComponentOrientation 를 설정하는 것이 간단하게 됩니다.

데스크탑 관련의 프로퍼티에의 신규 액세스

이 변경에 관련하는 버그 추적 리포트: 4290973 .

Windows Look & Feel 의 갱신의 일부로서 메소드가 LookAndFeelgetDesktopPropertyValue 에 추가되어 데스크탑 관련의 프로퍼티에 액세스하기 쉬워졌습니다.

컴퍼넌트의 인 세트에 의한 오프셋(offset) 구형에 대한 신규 메소드

이 메소드는, 실제로는 불확정인 상태를 지원하기 위해서,JProgressBar 의 갱신의 일부로서 추가되었습니다. 이 변경에 관련하는 버그 추적 리포트: 4290717 .

새로운 메소드는,SwingUtilities 에 추가된 calculateInnerArea(Component, Rectangle) 입니다.

마우스 휠을 위한 신규 API

이 변경에 관련하는 버그 추적 리포트: 4356268 .

마우스의 중앙 버튼으로서 스크롤 휠이 붙은 휠 마우스는, 일반적으로 되고 있습니다. 이 제안에서는, 마우스 휠을 사용해 스크롤 시키는 편입의 Java 지원 외에, 새로운 휠 이벤트 청취자도 제공되므로, 마우스 휠의 동작을 개발자가 커스터마이즈 할 수 있게 됩니다.

새로운 클래스인 MouseWheelListener 와 새로운 인터페이스인 MouseWheelEvent 가 추가되었습니다. 또, 정수의 MOUSE_WHEEL_EVENT_MASKAWTEvent 에 추가되었습니다. AWTEventMulticaster 에는,mouseWheelMoved ,add , 및 remove 의 3 개의 새로운 메소드가 있습니다. Component 에는,addMouseWheelListenerremoveMouseWheelListener 의 2 개의 새로운 메소드가 있습니다. ScrollPane 에도,setWheelScrollingEnabledisWheelScrollingEnabled 의 2 개의 새로운 메소드가 있습니다. 마지막으로,Robot 에도 새로운 메소드의 mouseWheel 가 있습니다.

JFrame, JDialog, 및 JApplet 가 processKeyEvent 를 오버라이드(override) 하지 않게 되었다

이 변경에 관련하는 버그 추적 리포트: 4462408 .

Swing 는,JComponent 에 키 바인딩을 등록하는 옵션을 지원하고 있습니다. 이전의 릴리스에서는, Swing 의 톱 레벨의 컴퍼넌트 (JFrame ,JDialog , 및 JApplet )의 1 개에 포커스가 있는 경우, 키 바인딩을 유효하게 하려면 , 이러한 톱 레벨의 컴퍼넌트로 processKeyEvent (java.awt.Component 로 정의되고 있다)를 오버라이드(override) 할 필요가 있었습니다. java.awt.KeyEventPostProcessor 가 추가되어 Swing 로 이것을 이용하는 것으로써 (RFE 4389332 ), Swing 의 톱 레벨의 컴퍼넌트로 이러한 메소드를 오버라이드(override) 할 필요는 없어졌습니다. 이 릴리스에서는, 이러한 메소드는 톱 레벨로부터 삭제되어 상속되게 되었습니다.

JWindow 생성자 의 헷드레스 예외에 관한 문서

이 변경에 관련하는 버그 추적 리포트: 4483258 .

이 릴리스에서는 헷드레스모드가 추가되었습니다만,JWindow 의 2 개의 생성자 으로,HeadlessException 가 throw 될 가능성이 나타나고 있지 않았습니다. Window(Window, GraphicsConfiguration)JWindow(GraphicsConfiguration) 의 javadoc 로, 이 점이 수정되었습니다.

입력 검증자의 기존의 버그

이 변경에 관련하는 버그 추적 리포트: 4532517 .

일부의 사용자에게 문제를 발생시키고 있는 입력 검증자의 버그가 최근 발견되었습니다. 1.4 의 shouldYieldFocus 메소드에서는,OptionPane 를 pop-up 시키는 등의 부작용은 허가되지 않습니다.

이것에는, 다음과 같은 회피책이 있습니다.

    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 내의 클래스는, 복수의 Look & Feel 를 다중화하기 위해서(때문에) 사용됩니다. 이 클래스는 일반적으로, 청각 정보등의 추가 정보를 제공하기 위한 보조 Look & Feel 를 사용하는 사용자 보조 기능으로서 사용됩니다. 현재로서는, 보조 Look & Feel 의 사용을 불안정하게 하는 RootPaneUI 의 복수의 구현은 없습니다.

신규 클래스의 javax.swing.plaf.multi.MultiRootPaneUI 가 추가되었습니다.

윈도우 장식을 제공하는 Look & Feel 의 지원

이 변경에 관련하는 버그 추적 리포트: 4290471 .

AWT 에서는 최근,Window 의 장식을 없애는 API 를 제공했습니다. 즉, 비장식으로 설정되어 있는 경우, 윈도우를 닫거나 이동하거나 사이즈를 변경하거나 할 경우에,Window 는 어떠한 위젯도 draw도 하지 않습니다. 그 의미로, Swing 에서는 Look & Feel 기능이 윈도우의 장식을 draw 할 수 있게 되었습니다.

이 기능은 주로 javax.swing.JRootPane 로 지원됩니다만,javax.swing.JFramejavax.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() 

모든 Look & Feel 가 윈도우의 장식 스타일을 지원하는 것은 아니기 때문에,getSupportsWindowDecorations 메소드가 javax.swing.LookAndFeel 에 추가되어, Look & Feel 가 이 동작을 지원할지 어떨지를 나타낼 방법이 제공되었습니다.

isDefaultLookAndFeelDecorated()setDefaultLookAndFeelDecorated 메소드가 JFrame 에 추가되었습니다.

또,isDefaultLookAndFeelDecorated()setDefaultLookAndFeelDecorated 메소드가 JDialog 에 추가되었습니다.


JScrollBar

JScrollBar 가 setUI 를 오버라이드(override) 하게 되었다

이 변경에 관련하는 버그 추적 리포트: 4213298 .

JScrollBar 는 이전,setUI 메소드를 오버라이드(override) 하지 않았습니다. 이 릴리스에서는, 오버라이드(override) 하도록(듯이) 변경되었습니다.


JScrollPane

JScrollPane 의 신규 MouseWheelListener 의 지원

이것은, 마우스 휠의 지원의 일부로서 구현되었습니다. 여기에서는,JScrollPane 에 대한 변경만을 설명합니다. 그 외의 변경에 관한 자세한 것은, 이섹션을 참조해 주세요. 이 변경에 관련하는 버그 추적 리포트: 4356268 .

isWheelScrollingEnabledsetWheelScrollingEnabled 메소드가 JScrollPane 에 추가되었습니다.

새로운 보호된 내부 클래스의 MouseWheelHandlerjavax.swing.plaf.basic.BasicScrollPaneUI 에 추가되었습니다. 이 내부 클래스에 관련하는 메소드는,mouseWheelMoved 입니다. 또, 새로운 createMouseWheelListener 메소드가 BasicScrollPaneUI 에 추가되었습니다.


RepaintManager

신규 VolatileImage 의 지원

이 변경에 관련하는 버그 추적 리포트: 4363288 .

Java 2D 팀에서는,Image 의 그래픽스와 스크린 조립 조작에 하드웨어 고속화를 이용할 수 있는, 새로운 VolatileImage 기구를 구현했습니다.

특히 지정하지 않는 한, Swing 는 더블 버퍼를 사용해 GUI 컴퍼넌트의 내용을 그립니다. 이것은, 오프 스크린 이미지에 draw 해, 그 후 그 이미지를 스크린에 카피하는 것으로 행해집니다. 이 과정이, 새로운 VolatileImage 지원를 이용하기 위해서 변경되었습니다.

페인트를 실행하기 위해서 Swing 가 사용하는 더블 버퍼는,getOffscreenBuffer 메소드를 사용해 RepaintManager 로부터 가져옵니다. VolatileImage 객체에는 실패 조건을 테스트하기 위한 특수한 조작이 필요하기 때문에,VolatileImage 를 돌려주는 이 메소드를 간단하게 변경할 수 없었습니다. 그것은, 이 메소드를 호출하는 기존의 코드가 존재할 가능성이 있어, 이 추가의 처리가 구현되어 있지 않기 때문입니다. 따라서, 특히 VolatileImage 객체를 돌려주기 위해서(때문에),getVolatileOffscreenBuffer 메소드가 javax.swing.RepaintManager 에 추가되었습니다.


SpringLayout

새로운 SpringLayout 클래스

이 변경에 관련하는 버그 추적 리포트: 4290203 .

이 릴리스에서는, 새로운 레이아웃 매니저 SpringLayout 가 도입되었습니다.

SpringLayout 의 사용예에 대해서는, Java 튜토리얼의「How to Use SpringLayout」을 참조해 주세요.


Copyright © 2006 Sun Microsystems, Inc. All Rights Reserved.

코멘트의 송부처:swing-feedback@java.sun.com . 이것은 구독 리스트가 아닙니다.
Sun
Java Software