下面列出了怎么用sun.awt.windows.ThemeReader的API类实例代码及写法,或者点击链接到github查看源代码。
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Get the singleton instance of this class
*
* @return the singleton instance of this class or null if XP styles
* are not active or if this is not Windows XP
*/
static synchronized XPStyle getXP() {
if (themeActive == null) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
themeActive =
(Boolean)toolkit.getDesktopProperty("win.xpstyle.themeActive");
if (themeActive == null) {
themeActive = Boolean.FALSE;
}
if (themeActive.booleanValue()) {
GetPropertyAction propertyAction =
new GetPropertyAction("swing.noxp");
if (AccessController.doPrivileged(propertyAction) == null &&
ThemeReader.isThemed() &&
!(UIManager.getLookAndFeel()
instanceof WindowsClassicLookAndFeel)) {
xp = new XPStyle();
}
}
}
return ThemeReader.isXPStyleEnabled() ? xp : null;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
w = bi.getWidth();
h = bi.getHeight();
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/** Get the singleton instance of this class
*
* @return the singleton instance of this class or null if XP styles
* are not active or if this is not Windows XP
*/
static synchronized XPStyle getXP() {
if (themeActive == null) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
themeActive =
(Boolean)toolkit.getDesktopProperty("win.xpstyle.themeActive");
if (themeActive == null) {
themeActive = Boolean.FALSE;
}
if (themeActive.booleanValue()) {
GetPropertyAction propertyAction =
new GetPropertyAction("swing.noxp");
if (AccessController.doPrivileged(propertyAction) == null &&
ThemeReader.isThemed() &&
!(UIManager.getLookAndFeel()
instanceof WindowsClassicLookAndFeel)) {
xp = new XPStyle();
}
}
}
return ThemeReader.isXPStyleEnabled() ? xp : null;
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
w = bi.getWidth();
h = bi.getHeight();
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
protected void paintToImage(Component c, Image image, Graphics g,
int w, int h, Object[] args) {
boolean accEnabled = false;
Skin skin = (Skin)args[0];
Part part = skin.part;
State state = (State)args[1];
if (state == null) {
state = skin.state;
}
if (c == null) {
c = skin.component;
}
BufferedImage bi = (BufferedImage)image;
WritableRaster raster = bi.getRaster();
DataBufferInt dbi = (DataBufferInt)raster.getDataBuffer();
// Note that stealData() requires a markDirty() afterwards
// since we modify the data in it.
ThemeReader.paintBackground(SunWritableRaster.stealData(dbi, 0),
part.getControlName(c), part.getValue(),
State.getValue(part, state),
0, 0, w, h, w);
SunWritableRaster.markDirty(dbi);
}
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Get a named <code>Color</code> value from the current style
*
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Get a named <code>Color</code> value from the current style
*
* @param part a <code>Part</code>
* @return a <code>Color</code> or null if key is not found
* in the current style
*/
synchronized Color getColor(Skin skin, Prop prop, Color fallback) {
String key = skin.toString() + "." + prop.name();
Part part = skin.part;
Color color = colorMap.get(key);
if (color == null) {
color = ThemeReader.getColor(part.getControlName(null), part.getValue(),
State.getValue(part, skin.state),
prop.getValue());
if (color != null) {
color = new ColorUIResource(color);
colorMap.put(key, color);
}
}
return (color != null) ? color : fallback;
}
/** Paint a skin at a defined position and size
* This method supports animation.
*
* @param g the graphics context to use for painting
* @param dx the destination <i>x</i> coordinate
* @param dy the destination <i>y</i> coordinate
* @param dw the width of the area to fill, may cause
* the image to be stretched or tiled
* @param dh the height of the area to fill, may cause
* the image to be stretched or tiled
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
component) == null) {
AnimationController.paintSkin((JComponent) component, this,
g, dx, dy, dw, dh, state);
} else {
paintSkinRaw(g, dx, dy, dw, dh, state);
}
}
long getThemeTransitionDuration(Component c, Part part, State stateFrom,
State stateTo, Prop prop) {
return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
part.getValue(),
State.getValue(part, stateFrom),
State.getValue(part, stateTo),
(prop != null) ? prop.getValue() : 0);
}
long getThemeTransitionDuration(Component c, Part part, State stateFrom,
State stateTo, Prop prop) {
return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
part.getValue(),
State.getValue(part, stateFrom),
State.getValue(part, stateTo),
(prop != null) ? prop.getValue() : 0);
}
/** Paint a skin at a defined position and size
* This method supports animation.
*
* @param g the graphics context to use for painting
* @param dx the destination <i>x</i> coordinate
* @param dy the destination <i>y</i> coordinate
* @param dw the width of the area to fill, may cause
* the image to be stretched or tiled
* @param dh the height of the area to fill, may cause
* the image to be stretched or tiled
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
component) == null) {
AnimationController.paintSkin((JComponent) component, this,
g, dx, dy, dw, dh, state);
} else {
paintSkinRaw(g, dx, dy, dw, dh, state);
}
}
long getThemeTransitionDuration(Component c, Part part, State stateFrom,
State stateTo, Prop prop) {
return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
part.getValue(),
State.getValue(part, stateFrom),
State.getValue(part, stateTo),
(prop != null) ? prop.getValue() : 0);
}
/** Paint a skin at a defined position and size
* This method supports animation.
*
* @param g the graphics context to use for painting
* @param dx the destination <i>x</i> coordinate
* @param dy the destination <i>y</i> coordinate
* @param dw the width of the area to fill, may cause
* the image to be stretched or tiled
* @param dh the height of the area to fill, may cause
* the image to be stretched or tiled
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
component) == null) {
AnimationController.paintSkin((JComponent) component, this,
g, dx, dy, dw, dh, state);
} else {
paintSkinRaw(g, dx, dy, dw, dh, state);
}
}
Insets getContentMargin() {
/* idk: it seems margins are the same for all 'big enough'
* bounding rectangles.
*/
int boundingWidth = 100;
int boundingHeight = 100;
Insets insets = ThemeReader.getThemeBackgroundContentMargins(
part.getControlName(null), part.getValue(),
0, boundingWidth, boundingHeight);
return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
long getThemeTransitionDuration(Component c, Part part, State stateFrom,
State stateTo, Prop prop) {
return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
part.getValue(),
State.getValue(part, stateFrom),
State.getValue(part, stateTo),
(prop != null) ? prop.getValue() : 0);
}
private static String getTypeEnumName(Component c, Part part, State state, Prop prop) {
int enumValue = ThemeReader.getEnum(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
if (enumValue == -1) {
return null;
}
return TypeEnum.getTypeEnum(prop, enumValue).getName();
}
Insets getContentMargin() {
/* idk: it seems margins are the same for all 'big enough'
* bounding rectangles.
*/
int boundingWidth = 100;
int boundingHeight = 100;
Insets insets = ThemeReader.getThemeBackgroundContentMargins(
part.getControlName(null), part.getValue(),
0, boundingWidth, boundingHeight);
return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
private static String getTypeEnumName(Component c, Part part, State state, Prop prop) {
int enumValue = ThemeReader.getEnum(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
if (enumValue == -1) {
return null;
}
return TypeEnum.getTypeEnum(prop, enumValue).getName();
}
Insets getContentMargin() {
/* idk: it seems margins are the same for all 'big enough'
* bounding rectangles.
*/
int boundingWidth = 100;
int boundingHeight = 100;
Insets insets = ThemeReader.getThemeBackgroundContentMargins(
part.getControlName(null), part.getValue(),
0, boundingWidth, boundingHeight);
return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
/** Paint a skin at a defined position and size
* This method supports animation.
*
* @param g the graphics context to use for painting
* @param dx the destination <i>x</i> coordinate
* @param dy the destination <i>y</i> coordinate
* @param dw the width of the area to fill, may cause
* the image to be stretched or tiled
* @param dh the height of the area to fill, may cause
* the image to be stretched or tiled
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
component) == null) {
AnimationController.paintSkin((JComponent) component, this,
g, dx, dy, dw, dh, state);
} else {
paintSkinRaw(g, dx, dy, dw, dh, state);
}
}
long getThemeTransitionDuration(Component c, Part part, State stateFrom,
State stateTo, Prop prop) {
return ThemeReader.getThemeTransitionDuration(part.getControlName(c),
part.getValue(),
State.getValue(part, stateFrom),
State.getValue(part, stateTo),
(prop != null) ? prop.getValue() : 0);
}