Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5bb3779f
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看板
提交
5bb3779f
编写于
7月 15, 2011
作者:
S
serb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6642728: Use reflection to access ScrollPane's private method from within sun.awt package
Reviewed-by: art, anthony
上级
7216d912
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
50 addition
and
47 deletion
+50
-47
src/share/classes/java/awt/ScrollPaneAdjustable.java
src/share/classes/java/awt/ScrollPaneAdjustable.java
+8
-0
src/share/classes/sun/awt/AWTAccessor.java
src/share/classes/sun/awt/AWTAccessor.java
+31
-5
src/solaris/classes/sun/awt/X11/XScrollPanePeer.java
src/solaris/classes/sun/awt/X11/XScrollPanePeer.java
+6
-13
src/windows/classes/sun/awt/windows/WScrollPanePeer.java
src/windows/classes/sun/awt/windows/WScrollPanePeer.java
+5
-4
src/windows/native/sun/windows/awt_ScrollPane.cpp
src/windows/native/sun/windows/awt_ScrollPane.cpp
+0
-25
未找到文件。
src/share/classes/java/awt/ScrollPaneAdjustable.java
浏览文件 @
5bb3779f
...
@@ -24,6 +24,8 @@
...
@@ -24,6 +24,8 @@
*/
*/
package
java.awt
;
package
java.awt
;
import
sun.awt.AWTAccessor
;
import
java.awt.event.AdjustmentEvent
;
import
java.awt.event.AdjustmentEvent
;
import
java.awt.event.AdjustmentListener
;
import
java.awt.event.AdjustmentListener
;
import
java.awt.peer.ScrollPanePeer
;
import
java.awt.peer.ScrollPanePeer
;
...
@@ -156,6 +158,12 @@ public class ScrollPaneAdjustable implements Adjustable, Serializable {
...
@@ -156,6 +158,12 @@ public class ScrollPaneAdjustable implements Adjustable, Serializable {
if
(!
GraphicsEnvironment
.
isHeadless
())
{
if
(!
GraphicsEnvironment
.
isHeadless
())
{
initIDs
();
initIDs
();
}
}
AWTAccessor
.
setScrollPaneAdjustableAccessor
(
new
AWTAccessor
.
ScrollPaneAdjustableAccessor
()
{
public
void
setTypedValue
(
final
ScrollPaneAdjustable
adj
,
final
int
v
,
final
int
type
)
{
adj
.
setTypedValue
(
v
,
type
);
}
});
}
}
/**
/**
...
...
src/share/classes/sun/awt/AWTAccessor.java
浏览文件 @
5bb3779f
...
@@ -25,15 +25,12 @@
...
@@ -25,15 +25,12 @@
package
sun.awt
;
package
sun.awt
;
import
sun.misc.Unsafe
;
import
java.awt.*
;
import
java.awt.*
;
import
java.awt.event.InputEvent
;
import
java.awt.event.InputEvent
;
import
java.awt.geom.Point2D
;
import
java.awt.geom.Point2D
;
import
java.awt.image.BufferedImage
;
import
sun.misc.Unsafe
;
import
java.awt.peer.ComponentPeer
;
import
java.awt.peer.ComponentPeer
;
import
java.security.AccessController
;
import
java.security.AccessControlContext
;
import
java.security.AccessControlContext
;
/**
/**
...
@@ -470,6 +467,17 @@ public final class AWTAccessor {
...
@@ -470,6 +467,17 @@ public final class AWTAccessor {
boolean
isMultipleMode
(
FileDialog
fileDialog
);
boolean
isMultipleMode
(
FileDialog
fileDialog
);
}
}
/*
* An accessor for the ScrollPaneAdjustable class.
*/
public
interface
ScrollPaneAdjustableAccessor
{
/*
* Sets the value of this scrollbar to the specified value.
*/
void
setTypedValue
(
final
ScrollPaneAdjustable
adj
,
final
int
v
,
final
int
type
);
}
/*
/*
* Accessor instances are initialized in the static initializers of
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
* corresponding AWT classes by using setters defined below.
...
@@ -485,6 +493,7 @@ public final class AWTAccessor {
...
@@ -485,6 +493,7 @@ public final class AWTAccessor {
private
static
EventQueueAccessor
eventQueueAccessor
;
private
static
EventQueueAccessor
eventQueueAccessor
;
private
static
PopupMenuAccessor
popupMenuAccessor
;
private
static
PopupMenuAccessor
popupMenuAccessor
;
private
static
FileDialogAccessor
fileDialogAccessor
;
private
static
FileDialogAccessor
fileDialogAccessor
;
private
static
ScrollPaneAdjustableAccessor
scrollPaneAdjustableAccessor
;
/*
/*
* Set an accessor object for the java.awt.Component class.
* Set an accessor object for the java.awt.Component class.
...
@@ -675,4 +684,21 @@ public final class AWTAccessor {
...
@@ -675,4 +684,21 @@ public final class AWTAccessor {
return
fileDialogAccessor
;
return
fileDialogAccessor
;
}
}
/*
* Set an accessor object for the java.awt.ScrollPaneAdjustable class.
*/
public
static
void
setScrollPaneAdjustableAccessor
(
ScrollPaneAdjustableAccessor
adj
)
{
scrollPaneAdjustableAccessor
=
adj
;
}
/*
* Retrieve the accessor object for the java.awt.ScrollPaneAdjustable
* class.
*/
public
static
ScrollPaneAdjustableAccessor
getScrollPaneAdjustableAccessor
()
{
if
(
scrollPaneAdjustableAccessor
==
null
)
{
unsafe
.
ensureClassInitialized
(
ScrollPaneAdjustable
.
class
);
}
return
scrollPaneAdjustableAccessor
;
}
}
}
src/solaris/classes/sun/awt/X11/XScrollPanePeer.java
浏览文件 @
5bb3779f
...
@@ -29,6 +29,8 @@ import java.awt.*;
...
@@ -29,6 +29,8 @@ import java.awt.*;
import
java.awt.event.*
;
import
java.awt.event.*
;
import
java.awt.peer.*
;
import
java.awt.peer.*
;
import
java.lang.reflect.*
;
import
java.lang.reflect.*
;
import
sun.awt.AWTAccessor
;
import
sun.awt.SunToolkit
;
import
sun.awt.SunToolkit
;
class
XScrollPanePeer
extends
XComponentPeer
implements
ScrollPanePeer
,
XScrollbarClient
{
class
XScrollPanePeer
extends
XComponentPeer
implements
ScrollPanePeer
,
XScrollbarClient
{
...
@@ -41,9 +43,7 @@ class XScrollPanePeer extends XComponentPeer implements ScrollPanePeer, XScrollb
...
@@ -41,9 +43,7 @@ class XScrollPanePeer extends XComponentPeer implements ScrollPanePeer, XScrollb
public
final
static
int
VERTICAL
=
1
<<
0
;
public
final
static
int
VERTICAL
=
1
<<
0
;
public
final
static
int
HORIZONTAL
=
1
<<
1
;
public
final
static
int
HORIZONTAL
=
1
<<
1
;
private
static
Method
m_setValue
;
static
{
static
{
m_setValue
=
SunToolkit
.
getMethod
(
ScrollPaneAdjustable
.
class
,
"setTypedValue"
,
new
Class
[]
{
Integer
.
TYPE
,
Integer
.
TYPE
});
SCROLLBAR
=
XToolkit
.
getUIDefaults
().
getInt
(
"ScrollBar.defaultWidth"
);
SCROLLBAR
=
XToolkit
.
getUIDefaults
().
getInt
(
"ScrollBar.defaultWidth"
);
}
}
...
@@ -319,17 +319,10 @@ class XScrollPanePeer extends XComponentPeer implements ScrollPanePeer, XScrollb
...
@@ -319,17 +319,10 @@ class XScrollPanePeer extends XComponentPeer implements ScrollPanePeer, XScrollb
c
.
move
(
sx
,
sy
);
c
.
move
(
sx
,
sy
);
}
}
void
setAdjustableValue
(
ScrollPaneAdjustable
adj
,
int
value
,
int
type
)
{
private
void
setAdjustableValue
(
final
ScrollPaneAdjustable
adj
,
final
int
value
,
try
{
final
int
type
)
{
m_setValue
.
invoke
(
adj
,
new
Object
[]
{
Integer
.
valueOf
(
value
),
Integer
.
valueOf
(
type
)});
AWTAccessor
.
getScrollPaneAdjustableAccessor
().
setTypedValue
(
adj
,
value
,
}
catch
(
IllegalAccessException
iae
)
{
type
);
adj
.
setValue
(
value
);
}
catch
(
IllegalArgumentException
iae2
)
{
adj
.
setValue
(
value
);
}
catch
(
InvocationTargetException
ite
)
{
adj
.
setValue
(
value
);
ite
.
getCause
().
printStackTrace
();
}
}
}
@Override
@Override
void
paintPeer
(
final
Graphics
g
)
{
void
paintPeer
(
final
Graphics
g
)
{
...
...
src/windows/classes/sun/awt/windows/WScrollPanePeer.java
浏览文件 @
5bb3779f
...
@@ -27,6 +27,8 @@ package sun.awt.windows;
...
@@ -27,6 +27,8 @@ package sun.awt.windows;
import
java.awt.*
;
import
java.awt.*
;
import
java.awt.event.AdjustmentEvent
;
import
java.awt.event.AdjustmentEvent
;
import
java.awt.peer.ScrollPanePeer
;
import
java.awt.peer.ScrollPanePeer
;
import
sun.awt.AWTAccessor
;
import
sun.awt.PeerEvent
;
import
sun.awt.PeerEvent
;
import
sun.util.logging.PlatformLogger
;
import
sun.util.logging.PlatformLogger
;
...
@@ -169,8 +171,6 @@ class WScrollPanePeer extends WPanelPeer implements ScrollPanePeer {
...
@@ -169,8 +171,6 @@ class WScrollPanePeer extends WPanelPeer implements ScrollPanePeer {
}
}
}
}
native
void
setTypedValue
(
ScrollPaneAdjustable
adjustable
,
int
newpos
,
int
type
);
/*
/*
* Runnable for the ScrollEvent that performs the adjustment.
* Runnable for the ScrollEvent that performs the adjustment.
*/
*/
...
@@ -247,8 +247,9 @@ class WScrollPanePeer extends WPanelPeer implements ScrollPanePeer {
...
@@ -247,8 +247,9 @@ class WScrollPanePeer extends WPanelPeer implements ScrollPanePeer {
// Fix for 4075484 - consider type information when creating AdjustmentEvent
// Fix for 4075484 - consider type information when creating AdjustmentEvent
// We can't just call adj.setValue() because it creates AdjustmentEvent with type=TRACK
// We can't just call adj.setValue() because it creates AdjustmentEvent with type=TRACK
// Instead, we call private method setTypedValue of ScrollPaneAdjustable.
// Instead, we call private method setTypedValue of ScrollPaneAdjustable.
// Because ScrollPaneAdjustable is in another package we should call it through native code.
AWTAccessor
.
getScrollPaneAdjustableAccessor
().
setTypedValue
(
adj
,
setTypedValue
(
adj
,
newpos
,
type
);
newpos
,
type
);
// Paint the exposed area right away. To do this - find
// Paint the exposed area right away. To do this - find
// the heavyweight ancestor of the scroll child.
// the heavyweight ancestor of the scroll child.
...
...
src/windows/native/sun/windows/awt_ScrollPane.cpp
浏览文件 @
5bb3779f
...
@@ -808,29 +808,4 @@ Java_sun_awt_windows_WScrollPanePeer_setSpans(JNIEnv *env, jobject self,
...
@@ -808,29 +808,4 @@ Java_sun_awt_windows_WScrollPanePeer_setSpans(JNIEnv *env, jobject self,
CATCH_BAD_ALLOC
;
CATCH_BAD_ALLOC
;
}
}
/*
* Class: sun_awt_windows_WScrollPanePeer
* Method: setTypedValue
* Signature: (Ljava/awt/ScrollPaneAdjustable;II)V
*/
JNIEXPORT
void
JNICALL
Java_sun_awt_windows_WScrollPanePeer_setTypedValue
(
JNIEnv
*
env
,
jobject
peer
,
jobject
adjustable
,
jint
value
,
jint
type
)
{
// need this global ref to make the class unloadable (see 6500204)
static
jclass
scrollPaneAdj
;
static
jmethodID
setTypedValueMID
=
0
;
if
(
setTypedValueMID
==
NULL
)
{
jclass
clazz
=
env
->
FindClass
(
"java/awt/ScrollPaneAdjustable"
);
if
(
safe_ExceptionOccurred
(
env
))
{
env
->
ExceptionDescribe
();
env
->
ExceptionClear
();
}
setTypedValueMID
=
env
->
GetMethodID
(
clazz
,
"setTypedValue"
,
"(II)V"
);
scrollPaneAdj
=
(
jclass
)
env
->
NewGlobalRef
(
clazz
);
env
->
DeleteLocalRef
(
clazz
);
DASSERT
(
setTypedValueMID
!=
NULL
);
}
env
->
CallVoidMethod
(
adjustable
,
setTypedValueMID
,
value
,
type
);
}
}
/* extern "C" */
}
/* extern "C" */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录