Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
d953f435
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d953f435
编写于
6月 18, 2009
作者:
M
malenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6660049: Synth Region.uiToRegionMap/lowerCaseNameMap are mutable statics
Reviewed-by: hawtin
上级
cf3ccce3
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
288 addition
and
125 deletion
+288
-125
src/share/classes/javax/swing/plaf/synth/Region.java
src/share/classes/javax/swing/plaf/synth/Region.java
+165
-125
test/javax/swing/plaf/synth/Test6660049.java
test/javax/swing/plaf/synth/Test6660049.java
+123
-0
未找到文件。
src/share/classes/javax/swing/plaf/synth/Region.java
浏览文件 @
d953f435
/*
* Copyright 2002-200
8
Sun Microsystems, Inc. All Rights Reserved.
* Copyright 2002-200
9
Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -24,8 +24,13 @@
*/
package
javax.swing.plaf.synth
;
import
javax.swing.*
;
import
java.util.*
;
import
sun.awt.AppContext
;
import
java.util.HashMap
;
import
java.util.Locale
;
import
java.util.Map
;
import
javax.swing.JComponent
;
import
javax.swing.UIDefaults
;
/**
* A distinct rendering area of a Swing component. A component may
...
...
@@ -67,8 +72,8 @@ import java.util.*;
* @author Scott Violet
*/
public
class
Region
{
private
static
final
Map
<
String
,
Region
>
uiToRegionMap
=
new
HashMap
<
String
,
Region
>
();
private
static
final
Map
<
Region
,
String
>
lowerCaseNameMap
=
new
HashMap
<
Region
,
String
>
();
private
static
final
Object
UI_TO_REGION_MAP_KEY
=
new
Object
();
private
static
final
Object
LOWER_CASE_NAME_MAP_KEY
=
new
Object
();
/**
* ArrowButton's are special types of buttons that also render a
...
...
@@ -77,396 +82,433 @@ public class Region {
* To bind a style to this <code>Region</code> use the name
* <code>ArrowButton</code>.
*/
public
static
final
Region
ARROW_BUTTON
=
new
Region
(
"ArrowButton"
,
"ArrowButtonUI"
);
public
static
final
Region
ARROW_BUTTON
=
new
Region
(
"ArrowButton"
,
false
);
/**
* Button region. To bind a style to this <code>Region</code> use the name
* <code>Button</code>.
*/
public
static
final
Region
BUTTON
=
new
Region
(
"Button"
,
"ButtonUI"
);
public
static
final
Region
BUTTON
=
new
Region
(
"Button"
,
false
);
/**
* CheckBox region. To bind a style to this <code>Region</code> use the name
* <code>CheckBox</code>.
*/
public
static
final
Region
CHECK_BOX
=
new
Region
(
"CheckBox"
,
"CheckBoxUI"
);
public
static
final
Region
CHECK_BOX
=
new
Region
(
"CheckBox"
,
false
);
/**
* CheckBoxMenuItem region. To bind a style to this <code>Region</code> use
* the name <code>CheckBoxMenuItem</code>.
*/
public
static
final
Region
CHECK_BOX_MENU_ITEM
=
new
Region
(
"CheckBoxMenuItem"
,
"CheckBoxMenuItemUI"
);
public
static
final
Region
CHECK_BOX_MENU_ITEM
=
new
Region
(
"CheckBoxMenuItem"
,
false
);
/**
* ColorChooser region. To bind a style to this <code>Region</code> use
* the name <code>ColorChooser</code>.
*/
public
static
final
Region
COLOR_CHOOSER
=
new
Region
(
"ColorChooser"
,
"ColorChooserUI"
);
public
static
final
Region
COLOR_CHOOSER
=
new
Region
(
"ColorChooser"
,
false
);
/**
* ComboBox region. To bind a style to this <code>Region</code> use
* the name <code>ComboBox</code>.
*/
public
static
final
Region
COMBO_BOX
=
new
Region
(
"ComboBox"
,
"ComboBoxUI"
);
public
static
final
Region
COMBO_BOX
=
new
Region
(
"ComboBox"
,
false
);
/**
* DesktopPane region. To bind a style to this <code>Region</code> use
* the name <code>DesktopPane</code>.
*/
public
static
final
Region
DESKTOP_PANE
=
new
Region
(
"DesktopPane"
,
"DesktopPaneUI"
);
public
static
final
Region
DESKTOP_PANE
=
new
Region
(
"DesktopPane"
,
false
);
/**
* DesktopIcon region. To bind a style to this <code>Region</code> use
* the name <code>DesktopIcon</code>.
*/
public
static
final
Region
DESKTOP_ICON
=
new
Region
(
"DesktopIcon"
,
"DesktopIconUI"
);
public
static
final
Region
DESKTOP_ICON
=
new
Region
(
"DesktopIcon"
,
false
);
/**
* EditorPane region. To bind a style to this <code>Region</code> use
* the name <code>EditorPane</code>.
*/
public
static
final
Region
EDITOR_PANE
=
new
Region
(
"EditorPane"
,
"EditorPaneUI"
);
public
static
final
Region
EDITOR_PANE
=
new
Region
(
"EditorPane"
,
false
);
/**
* FileChooser region. To bind a style to this <code>Region</code> use
* the name <code>FileChooser</code>.
*/
public
static
final
Region
FILE_CHOOSER
=
new
Region
(
"FileChooser"
,
"FileChooserUI"
);
public
static
final
Region
FILE_CHOOSER
=
new
Region
(
"FileChooser"
,
false
);
/**
* FormattedTextField region. To bind a style to this <code>Region</code> use
* the name <code>FormattedTextField</code>.
*/
public
static
final
Region
FORMATTED_TEXT_FIELD
=
new
Region
(
"FormattedTextField"
,
"FormattedTextFieldUI"
);
public
static
final
Region
FORMATTED_TEXT_FIELD
=
new
Region
(
"FormattedTextField"
,
false
);
/**
* InternalFrame region. To bind a style to this <code>Region</code> use
* the name <code>InternalFrame</code>.
*/
public
static
final
Region
INTERNAL_FRAME
=
new
Region
(
"InternalFrame"
,
"InternalFrameUI"
);
public
static
final
Region
INTERNAL_FRAME
=
new
Region
(
"InternalFrame"
,
false
);
/**
* TitlePane of an InternalFrame. The TitlePane typically
* shows a menu, title, widgets to manipulate the internal frame.
* To bind a style to this <code>Region</code> use the name
* <code>InternalFrameTitlePane</code>.
*/
public
static
final
Region
INTERNAL_FRAME_TITLE_PANE
=
new
Region
(
"InternalFrameTitlePane"
,
"InternalFrameTitlePaneUI"
);
public
static
final
Region
INTERNAL_FRAME_TITLE_PANE
=
new
Region
(
"InternalFrameTitlePane"
,
false
);
/**
* Label region. To bind a style to this <code>Region</code> use the name
* <code>Label</code>.
*/
public
static
final
Region
LABEL
=
new
Region
(
"Label"
,
"LabelUI"
);
public
static
final
Region
LABEL
=
new
Region
(
"Label"
,
false
);
/**
* List region. To bind a style to this <code>Region</code> use the name
* <code>List</code>.
*/
public
static
final
Region
LIST
=
new
Region
(
"List"
,
"ListUI"
);
public
static
final
Region
LIST
=
new
Region
(
"List"
,
false
);
/**
* Menu region. To bind a style to this <code>Region</code> use the name
* <code>Menu</code>.
*/
public
static
final
Region
MENU
=
new
Region
(
"Menu"
,
"MenuUI"
);
public
static
final
Region
MENU
=
new
Region
(
"Menu"
,
false
);
/**
* MenuBar region. To bind a style to this <code>Region</code> use the name
* <code>MenuBar</code>.
*/
public
static
final
Region
MENU_BAR
=
new
Region
(
"MenuBar"
,
"MenuBarUI"
);
public
static
final
Region
MENU_BAR
=
new
Region
(
"MenuBar"
,
false
);
/**
* MenuItem region. To bind a style to this <code>Region</code> use the name
* <code>MenuItem</code>.
*/
public
static
final
Region
MENU_ITEM
=
new
Region
(
"MenuItem"
,
"MenuItemUI"
);
public
static
final
Region
MENU_ITEM
=
new
Region
(
"MenuItem"
,
false
);
/**
* Accelerator region of a MenuItem. To bind a style to this
* <code>Region</code> use the name <code>MenuItemAccelerator</code>.
*/
public
static
final
Region
MENU_ITEM_ACCELERATOR
=
new
Region
(
"MenuItemAccelerator"
);
public
static
final
Region
MENU_ITEM_ACCELERATOR
=
new
Region
(
"MenuItemAccelerator"
,
true
);
/**
* OptionPane region. To bind a style to this <code>Region</code> use
* the name <code>OptionPane</code>.
*/
public
static
final
Region
OPTION_PANE
=
new
Region
(
"OptionPane"
,
"OptionPaneUI"
);
public
static
final
Region
OPTION_PANE
=
new
Region
(
"OptionPane"
,
false
);
/**
* Panel region. To bind a style to this <code>Region</code> use the name
* <code>Panel</code>.
*/
public
static
final
Region
PANEL
=
new
Region
(
"Panel"
,
"PanelUI"
);
public
static
final
Region
PANEL
=
new
Region
(
"Panel"
,
false
);
/**
* PasswordField region. To bind a style to this <code>Region</code> use
* the name <code>PasswordField</code>.
*/
public
static
final
Region
PASSWORD_FIELD
=
new
Region
(
"PasswordField"
,
"PasswordFieldUI"
);
public
static
final
Region
PASSWORD_FIELD
=
new
Region
(
"PasswordField"
,
false
);
/**
* PopupMenu region. To bind a style to this <code>Region</code> use
* the name <code>PopupMenu</code>.
*/
public
static
final
Region
POPUP_MENU
=
new
Region
(
"PopupMenu"
,
"PopupMenuUI"
);
public
static
final
Region
POPUP_MENU
=
new
Region
(
"PopupMenu"
,
false
);
/**
* PopupMenuSeparator region. To bind a style to this <code>Region</code>
* use the name <code>PopupMenuSeparator</code>.
*/
public
static
final
Region
POPUP_MENU_SEPARATOR
=
new
Region
(
"PopupMenuSeparator"
,
"PopupMenuSeparatorUI"
);
public
static
final
Region
POPUP_MENU_SEPARATOR
=
new
Region
(
"PopupMenuSeparator"
,
false
);
/**
* ProgressBar region. To bind a style to this <code>Region</code>
* use the name <code>ProgressBar</code>.
*/
public
static
final
Region
PROGRESS_BAR
=
new
Region
(
"ProgressBar"
,
"ProgressBarUI"
);
public
static
final
Region
PROGRESS_BAR
=
new
Region
(
"ProgressBar"
,
false
);
/**
* RadioButton region. To bind a style to this <code>Region</code>
* use the name <code>RadioButton</code>.
*/
public
static
final
Region
RADIO_BUTTON
=
new
Region
(
"RadioButton"
,
"RadioButtonUI"
);
public
static
final
Region
RADIO_BUTTON
=
new
Region
(
"RadioButton"
,
false
);
/**
* RegionButtonMenuItem region. To bind a style to this <code>Region</code>
* use the name <code>RadioButtonMenuItem</code>.
*/
public
static
final
Region
RADIO_BUTTON_MENU_ITEM
=
new
Region
(
"RadioButtonMenuItem"
,
"RadioButtonMenuItemUI"
);
public
static
final
Region
RADIO_BUTTON_MENU_ITEM
=
new
Region
(
"RadioButtonMenuItem"
,
false
);
/**
* RootPane region. To bind a style to this <code>Region</code> use
* the name <code>RootPane</code>.
*/
public
static
final
Region
ROOT_PANE
=
new
Region
(
"RootPane"
,
"RootPaneUI"
);
public
static
final
Region
ROOT_PANE
=
new
Region
(
"RootPane"
,
false
);
/**
* ScrollBar region. To bind a style to this <code>Region</code> use
* the name <code>ScrollBar</code>.
*/
public
static
final
Region
SCROLL_BAR
=
new
Region
(
"ScrollBar"
,
"ScrollBarUI"
);
public
static
final
Region
SCROLL_BAR
=
new
Region
(
"ScrollBar"
,
false
);
/**
* Track of the ScrollBar. To bind a style to this <code>Region</code> use
* the name <code>ScrollBarTrack</code>.
*/
public
static
final
Region
SCROLL_BAR_TRACK
=
new
Region
(
"ScrollBarTrack"
);
public
static
final
Region
SCROLL_BAR_TRACK
=
new
Region
(
"ScrollBarTrack"
,
true
);
/**
* Thumb of the ScrollBar. The thumb is the region of the ScrollBar
* that gives a graphical depiction of what percentage of the View is
* currently visible. To bind a style to this <code>Region</code> use
* the name <code>ScrollBarThumb</code>.
*/
public
static
final
Region
SCROLL_BAR_THUMB
=
new
Region
(
"ScrollBarThumb"
);
public
static
final
Region
SCROLL_BAR_THUMB
=
new
Region
(
"ScrollBarThumb"
,
true
);
/**
* ScrollPane region. To bind a style to this <code>Region</code> use
* the name <code>ScrollPane</code>.
*/
public
static
final
Region
SCROLL_PANE
=
new
Region
(
"ScrollPane"
,
"ScrollPaneUI"
);
public
static
final
Region
SCROLL_PANE
=
new
Region
(
"ScrollPane"
,
false
);
/**
* Separator region. To bind a style to this <code>Region</code> use
* the name <code>Separator</code>.
*/
public
static
final
Region
SEPARATOR
=
new
Region
(
"Separator"
,
"SeparatorUI"
);
public
static
final
Region
SEPARATOR
=
new
Region
(
"Separator"
,
false
);
/**
* Slider region. To bind a style to this <code>Region</code> use
* the name <code>Slider</code>.
*/
public
static
final
Region
SLIDER
=
new
Region
(
"Slider"
,
"SliderUI"
);
public
static
final
Region
SLIDER
=
new
Region
(
"Slider"
,
false
);
/**
* Track of the Slider. To bind a style to this <code>Region</code> use
* the name <code>SliderTrack</code>.
*/
public
static
final
Region
SLIDER_TRACK
=
new
Region
(
"SliderTrack"
);
public
static
final
Region
SLIDER_TRACK
=
new
Region
(
"SliderTrack"
,
true
);
/**
* Thumb of the Slider. The thumb of the Slider identifies the current
* value. To bind a style to this <code>Region</code> use the name
* <code>SliderThumb</code>.
*/
public
static
final
Region
SLIDER_THUMB
=
new
Region
(
"SliderThumb"
);
public
static
final
Region
SLIDER_THUMB
=
new
Region
(
"SliderThumb"
,
true
);
/**
* Spinner region. To bind a style to this <code>Region</code> use the name
* <code>Spinner</code>.
*/
public
static
final
Region
SPINNER
=
new
Region
(
"Spinner"
,
"SpinnerUI"
);
public
static
final
Region
SPINNER
=
new
Region
(
"Spinner"
,
false
);
/**
* SplitPane region. To bind a style to this <code>Region</code> use the name
* <code>SplitPane</code>.
*/
public
static
final
Region
SPLIT_PANE
=
new
Region
(
"SplitPane"
,
"SplitPaneUI"
);
public
static
final
Region
SPLIT_PANE
=
new
Region
(
"SplitPane"
,
false
);
/**
* Divider of the SplitPane. To bind a style to this <code>Region</code>
* use the name <code>SplitPaneDivider</code>.
*/
public
static
final
Region
SPLIT_PANE_DIVIDER
=
new
Region
(
"SplitPaneDivider"
);
public
static
final
Region
SPLIT_PANE_DIVIDER
=
new
Region
(
"SplitPaneDivider"
,
true
);
/**
* TabbedPane region. To bind a style to this <code>Region</code> use
* the name <code>TabbedPane</code>.
*/
public
static
final
Region
TABBED_PANE
=
new
Region
(
"TabbedPane"
,
"TabbedPaneUI"
);
public
static
final
Region
TABBED_PANE
=
new
Region
(
"TabbedPane"
,
false
);
/**
* Region of a TabbedPane for one tab. To bind a style to this
* <code>Region</code> use the name <code>TabbedPaneTab</code>.
*/
public
static
final
Region
TABBED_PANE_TAB
=
new
Region
(
"TabbedPaneTab"
);
public
static
final
Region
TABBED_PANE_TAB
=
new
Region
(
"TabbedPaneTab"
,
true
);
/**
* Region of a TabbedPane containing the tabs. To bind a style to this
* <code>Region</code> use the name <code>TabbedPaneTabArea</code>.
*/
public
static
final
Region
TABBED_PANE_TAB_AREA
=
new
Region
(
"TabbedPaneTabArea"
);
public
static
final
Region
TABBED_PANE_TAB_AREA
=
new
Region
(
"TabbedPaneTabArea"
,
true
);
/**
* Region of a TabbedPane containing the content. To bind a style to this
* <code>Region</code> use the name <code>TabbedPaneContent</code>.
*/
public
static
final
Region
TABBED_PANE_CONTENT
=
new
Region
(
"TabbedPaneContent"
);
public
static
final
Region
TABBED_PANE_CONTENT
=
new
Region
(
"TabbedPaneContent"
,
true
);
/**
* Table region. To bind a style to this <code>Region</code> use
* the name <code>Table</code>.
*/
public
static
final
Region
TABLE
=
new
Region
(
"Table"
,
"TableUI"
);
public
static
final
Region
TABLE
=
new
Region
(
"Table"
,
false
);
/**
* TableHeader region. To bind a style to this <code>Region</code> use
* the name <code>TableHeader</code>.
*/
public
static
final
Region
TABLE_HEADER
=
new
Region
(
"TableHeader"
,
"TableHeaderUI"
);
public
static
final
Region
TABLE_HEADER
=
new
Region
(
"TableHeader"
,
false
);
/**
* TextArea region. To bind a style to this <code>Region</code> use
* the name <code>TextArea</code>.
*/
public
static
final
Region
TEXT_AREA
=
new
Region
(
"TextArea"
,
"TextAreaUI"
);
public
static
final
Region
TEXT_AREA
=
new
Region
(
"TextArea"
,
false
);
/**
* TextField region. To bind a style to this <code>Region</code> use
* the name <code>TextField</code>.
*/
public
static
final
Region
TEXT_FIELD
=
new
Region
(
"TextField"
,
"TextFieldUI"
);
public
static
final
Region
TEXT_FIELD
=
new
Region
(
"TextField"
,
false
);
/**
* TextPane region. To bind a style to this <code>Region</code> use
* the name <code>TextPane</code>.
*/
public
static
final
Region
TEXT_PANE
=
new
Region
(
"TextPane"
,
"TextPaneUI"
);
public
static
final
Region
TEXT_PANE
=
new
Region
(
"TextPane"
,
false
);
/**
* ToggleButton region. To bind a style to this <code>Region</code> use
* the name <code>ToggleButton</code>.
*/
public
static
final
Region
TOGGLE_BUTTON
=
new
Region
(
"ToggleButton"
,
"ToggleButtonUI"
);
public
static
final
Region
TOGGLE_BUTTON
=
new
Region
(
"ToggleButton"
,
false
);
/**
* ToolBar region. To bind a style to this <code>Region</code> use
* the name <code>ToolBar</code>.
*/
public
static
final
Region
TOOL_BAR
=
new
Region
(
"ToolBar"
,
"ToolBarUI"
);
public
static
final
Region
TOOL_BAR
=
new
Region
(
"ToolBar"
,
false
);
/**
* Region of the ToolBar containing the content. To bind a style to this
* <code>Region</code> use the name <code>ToolBarContent</code>.
*/
public
static
final
Region
TOOL_BAR_CONTENT
=
new
Region
(
"ToolBarContent"
);
public
static
final
Region
TOOL_BAR_CONTENT
=
new
Region
(
"ToolBarContent"
,
true
);
/**
* Region for the Window containing the ToolBar. To bind a style to this
* <code>Region</code> use the name <code>ToolBarDragWindow</code>.
*/
public
static
final
Region
TOOL_BAR_DRAG_WINDOW
=
new
Region
(
"ToolBarDragWindow"
,
null
,
false
);
public
static
final
Region
TOOL_BAR_DRAG_WINDOW
=
new
Region
(
"ToolBarDragWindow"
,
false
);
/**
* ToolTip region. To bind a style to this <code>Region</code> use
* the name <code>ToolTip</code>.
*/
public
static
final
Region
TOOL_TIP
=
new
Region
(
"ToolTip"
,
"ToolTipUI"
);
public
static
final
Region
TOOL_TIP
=
new
Region
(
"ToolTip"
,
false
);
/**
* ToolBar separator region. To bind a style to this <code>Region</code> use
* the name <code>ToolBarSeparator</code>.
*/
public
static
final
Region
TOOL_BAR_SEPARATOR
=
new
Region
(
"ToolBarSeparator"
,
"ToolBarSeparatorUI"
);
public
static
final
Region
TOOL_BAR_SEPARATOR
=
new
Region
(
"ToolBarSeparator"
,
false
);
/**
* Tree region. To bind a style to this <code>Region</code> use the name
* <code>Tree</code>.
*/
public
static
final
Region
TREE
=
new
Region
(
"Tree"
,
"TreeUI"
);
public
static
final
Region
TREE
=
new
Region
(
"Tree"
,
false
);
/**
* Region of the Tree for one cell. To bind a style to this
* <code>Region</code> use the name <code>TreeCell</code>.
*/
public
static
final
Region
TREE_CELL
=
new
Region
(
"TreeCell"
);
public
static
final
Region
TREE_CELL
=
new
Region
(
"TreeCell"
,
true
);
/**
* Viewport region. To bind a style to this <code>Region</code> use
* the name <code>Viewport</code>.
*/
public
static
final
Region
VIEWPORT
=
new
Region
(
"Viewport"
,
"ViewportUI"
);
private
String
name
;
private
boolean
subregion
;
public
static
final
Region
VIEWPORT
=
new
Region
(
"Viewport"
,
false
);
private
static
Map
<
String
,
Region
>
getUItoRegionMap
()
{
AppContext
context
=
AppContext
.
getAppContext
();
Map
<
String
,
Region
>
map
=
(
Map
<
String
,
Region
>)
context
.
get
(
UI_TO_REGION_MAP_KEY
);
if
(
map
==
null
)
{
map
=
new
HashMap
<
String
,
Region
>();
map
.
put
(
"ArrowButtonUI"
,
ARROW_BUTTON
);
map
.
put
(
"ButtonUI"
,
BUTTON
);
map
.
put
(
"CheckBoxUI"
,
CHECK_BOX
);
map
.
put
(
"CheckBoxMenuItemUI"
,
CHECK_BOX_MENU_ITEM
);
map
.
put
(
"ColorChooserUI"
,
COLOR_CHOOSER
);
map
.
put
(
"ComboBoxUI"
,
COMBO_BOX
);
map
.
put
(
"DesktopPaneUI"
,
DESKTOP_PANE
);
map
.
put
(
"DesktopIconUI"
,
DESKTOP_ICON
);
map
.
put
(
"EditorPaneUI"
,
EDITOR_PANE
);
map
.
put
(
"FileChooserUI"
,
FILE_CHOOSER
);
map
.
put
(
"FormattedTextFieldUI"
,
FORMATTED_TEXT_FIELD
);
map
.
put
(
"InternalFrameUI"
,
INTERNAL_FRAME
);
map
.
put
(
"InternalFrameTitlePaneUI"
,
INTERNAL_FRAME_TITLE_PANE
);
map
.
put
(
"LabelUI"
,
LABEL
);
map
.
put
(
"ListUI"
,
LIST
);
map
.
put
(
"MenuUI"
,
MENU
);
map
.
put
(
"MenuBarUI"
,
MENU_BAR
);
map
.
put
(
"MenuItemUI"
,
MENU_ITEM
);
map
.
put
(
"OptionPaneUI"
,
OPTION_PANE
);
map
.
put
(
"PanelUI"
,
PANEL
);
map
.
put
(
"PasswordFieldUI"
,
PASSWORD_FIELD
);
map
.
put
(
"PopupMenuUI"
,
POPUP_MENU
);
map
.
put
(
"PopupMenuSeparatorUI"
,
POPUP_MENU_SEPARATOR
);
map
.
put
(
"ProgressBarUI"
,
PROGRESS_BAR
);
map
.
put
(
"RadioButtonUI"
,
RADIO_BUTTON
);
map
.
put
(
"RadioButtonMenuItemUI"
,
RADIO_BUTTON_MENU_ITEM
);
map
.
put
(
"RootPaneUI"
,
ROOT_PANE
);
map
.
put
(
"ScrollBarUI"
,
SCROLL_BAR
);
map
.
put
(
"ScrollPaneUI"
,
SCROLL_PANE
);
map
.
put
(
"SeparatorUI"
,
SEPARATOR
);
map
.
put
(
"SliderUI"
,
SLIDER
);
map
.
put
(
"SpinnerUI"
,
SPINNER
);
map
.
put
(
"SplitPaneUI"
,
SPLIT_PANE
);
map
.
put
(
"TabbedPaneUI"
,
TABBED_PANE
);
map
.
put
(
"TableUI"
,
TABLE
);
map
.
put
(
"TableHeaderUI"
,
TABLE_HEADER
);
map
.
put
(
"TextAreaUI"
,
TEXT_AREA
);
map
.
put
(
"TextFieldUI"
,
TEXT_FIELD
);
map
.
put
(
"TextPaneUI"
,
TEXT_PANE
);
map
.
put
(
"ToggleButtonUI"
,
TOGGLE_BUTTON
);
map
.
put
(
"ToolBarUI"
,
TOOL_BAR
);
map
.
put
(
"ToolTipUI"
,
TOOL_TIP
);
map
.
put
(
"ToolBarSeparatorUI"
,
TOOL_BAR_SEPARATOR
);
map
.
put
(
"TreeUI"
,
TREE
);
map
.
put
(
"ViewportUI"
,
VIEWPORT
);
context
.
put
(
UI_TO_REGION_MAP_KEY
,
map
);
}
return
map
;
}
private
static
Map
<
Region
,
String
>
getLowerCaseNameMap
()
{
AppContext
context
=
AppContext
.
getAppContext
();
Map
<
Region
,
String
>
map
=
(
Map
<
Region
,
String
>)
context
.
get
(
LOWER_CASE_NAME_MAP_KEY
);
if
(
map
==
null
)
{
map
=
new
HashMap
<
Region
,
String
>();
context
.
put
(
LOWER_CASE_NAME_MAP_KEY
,
map
);
}
return
map
;
}
static
Region
getRegion
(
JComponent
c
)
{
return
uiToRegionMap
.
get
(
c
.
getUIClassID
());
return
getUItoRegionMap
()
.
get
(
c
.
getUIClassID
());
}
static
void
registerUIs
(
UIDefaults
table
)
{
for
(
String
key
:
uiToRegionMap
.
keySet
())
{
for
(
Object
key
:
getUItoRegionMap
()
.
keySet
())
{
table
.
put
(
key
,
"javax.swing.plaf.synth.SynthLookAndFeel"
);
}
}
private
final
String
name
;
private
final
boolean
subregion
;
Region
(
String
name
)
{
this
(
name
,
null
,
true
);
private
Region
(
String
name
,
boolean
subregion
)
{
if
(
name
==
null
)
{
throw
new
NullPointerException
(
"You must specify a non-null name"
);
}
Region
(
String
name
,
String
ui
)
{
this
(
name
,
ui
,
false
);
this
.
name
=
name
;
this
.
subregion
=
subregion
;
}
/**
...
...
@@ -481,14 +523,10 @@ public class Region {
* @param subregion Whether or not this is a subregion.
*/
protected
Region
(
String
name
,
String
ui
,
boolean
subregion
)
{
if
(
name
==
null
)
{
throw
new
NullPointerException
(
"You must specify a non-null name"
);
}
this
.
name
=
name
;
this
(
name
,
subregion
);
if
(
ui
!=
null
)
{
uiToRegionMap
.
put
(
ui
,
this
);
getUItoRegionMap
()
.
put
(
ui
,
this
);
}
this
.
subregion
=
subregion
;
}
/**
...
...
@@ -514,23 +552,25 @@ public class Region {
/**
* Returns the name, in lowercase.
*
* @return lower case representation of the name of the Region
*/
String
getLowerCaseName
()
{
synchronized
(
lowerCaseNameMap
)
{
Map
<
Region
,
String
>
lowerCaseNameMap
=
getLowerCaseNameMap
();
String
lowerCaseName
=
lowerCaseNameMap
.
get
(
this
);
if
(
lowerCaseName
==
null
)
{
lowerCaseName
=
getName
().
toLowerCase
(
);
lowerCaseName
=
name
.
toLowerCase
(
Locale
.
ENGLISH
);
lowerCaseNameMap
.
put
(
this
,
lowerCaseName
);
}
return
lowerCaseName
;
}
}
/**
* Returns the name of the Region.
*
* @return name of the Region.
*/
@Override
public
String
toString
()
{
return
name
;
}
...
...
test/javax/swing/plaf/synth/Test6660049.java
0 → 100644
浏览文件 @
d953f435
/*
* Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6660049 6849518
* @summary Tests the Region initialization
* @author Sergey Malenkov
*/
import
sun.awt.SunToolkit
;
import
javax.swing.JButton
;
import
javax.swing.JComponent
;
import
javax.swing.SwingUtilities
;
import
javax.swing.plaf.synth.Region
;
import
javax.swing.plaf.synth.SynthLookAndFeel
;
public
class
Test6660049
implements
Runnable
{
public
static
void
main
(
String
[]
args
)
{
SwingUtilities
.
invokeLater
(
new
Test6660049
(
javax
.
swing
.
JButton
.
class
,
javax
.
swing
.
JCheckBox
.
class
,
javax
.
swing
.
JCheckBoxMenuItem
.
class
,
javax
.
swing
.
JColorChooser
.
class
,
javax
.
swing
.
JComboBox
.
class
,
javax
.
swing
.
JDesktopPane
.
class
,
javax
.
swing
.
JEditorPane
.
class
,
javax
.
swing
.
JFileChooser
.
class
,
javax
.
swing
.
JFormattedTextField
.
class
,
javax
.
swing
.
JInternalFrame
.
class
,
javax
.
swing
.
JLabel
.
class
,
javax
.
swing
.
JList
.
class
,
javax
.
swing
.
JMenu
.
class
,
javax
.
swing
.
JMenuBar
.
class
,
javax
.
swing
.
JMenuItem
.
class
,
javax
.
swing
.
JOptionPane
.
class
,
javax
.
swing
.
JPanel
.
class
,
javax
.
swing
.
JPasswordField
.
class
,
javax
.
swing
.
JPopupMenu
.
class
,
javax
.
swing
.
JProgressBar
.
class
,
javax
.
swing
.
JRadioButton
.
class
,
javax
.
swing
.
JRadioButtonMenuItem
.
class
,
javax
.
swing
.
JRootPane
.
class
,
javax
.
swing
.
JScrollBar
.
class
,
javax
.
swing
.
JScrollPane
.
class
,
javax
.
swing
.
JSeparator
.
class
,
javax
.
swing
.
JSlider
.
class
,
javax
.
swing
.
JSpinner
.
class
,
javax
.
swing
.
JSplitPane
.
class
,
javax
.
swing
.
JTabbedPane
.
class
,
javax
.
swing
.
JTable
.
class
,
javax
.
swing
.
JTextArea
.
class
,
javax
.
swing
.
JTextField
.
class
,
javax
.
swing
.
JTextPane
.
class
,
javax
.
swing
.
JToggleButton
.
class
,
javax
.
swing
.
JToolBar
.
class
,
javax
.
swing
.
JToolTip
.
class
,
javax
.
swing
.
JTree
.
class
,
javax
.
swing
.
JViewport
.
class
,
javax
.
swing
.
table
.
JTableHeader
.
class
));
}
private
final
Class
<?
extends
JComponent
>[]
types
;
private
final
Region
region
;
private
Test6660049
(
Class
<?
extends
JComponent
>...
types
)
{
this
.
types
=
types
;
run
();
this
.
region
=
new
Region
(
"Button"
,
"ButtonUI"
,
true
)
{
@Override
public
String
getName
()
{
throw
new
Error
(
"6660049: exploit is available"
);
}
};
}
public
void
run
()
{
if
(
this
.
region
!=
null
)
{
SunToolkit
.
createNewAppContext
();
}
for
(
Class
<?
extends
JComponent
>
type
:
this
.
types
)
{
Region
region
=
getRegion
(
type
);
if
(
region
==
null
)
{
throw
new
Error
(
"6849518: region is not initialized"
);
}
}
getRegion
(
JButton
.
class
).
getName
();
}
private
static
Region
getRegion
(
Class
<?
extends
JComponent
>
type
)
{
try
{
return
SynthLookAndFeel
.
getRegion
(
type
.
newInstance
());
}
catch
(
IllegalAccessException
exception
)
{
throw
new
Error
(
"unexpected exception"
,
exception
);
}
catch
(
InstantiationException
exception
)
{
throw
new
Error
(
"unexpected exception"
,
exception
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录