javax.swing.text.html.ImageView中; 第111和258-267行 http://javasourcecode.org/html/open-source/jdk/jdk-6u23/javax/swing/text/html/ImageView.java.html
public class ImageView extends View {
....
private float vAlign;
....
}
我的节目:
.....
ImageView layeredPane = (ImageView) view;
Field privateStringField = layeredPane.getClass().getDeclaredField("vAlign");
privateStringField.setAccessible(true);
layeredPane.vAlign = 2.0;
.....
我明白了:
Test.java:80:错误:vAlign在ImageView中具有私有访问权限 layeredPane.vAlign = 2.0;
我该如何解决?我需要设置一个2.0的值
答案 0 :(得分:6)
通过不尝试获取私有实现细节来修复它。基本上你不应该这样做。即使您仍在使用此版本的ImageView
,您的代码也会变得脆弱,并且容易受到版本之间的更改的影响。它是私有的全部意义是停止你直接访问它。
(当它是 float 字段时,称它为privateStringField.setFloat(layeredPane, 2.0f)
很奇怪,顺便说一句......)
答案 1 :(得分:3)
首先,你为什么要使用2.0?我认为vAlign使用java.awt.Component contants进行BOTTOM_ALIGNMENT,CENTER_ALIGNMENT和TOP_ALIGNMENT分别保持1.0f,0.5f和0.0f,因此值2.0可能没有多大意义。
无论如何,因为它是一个私人领域,不要直接摆弄它并通过适当的方式改变它。看来这个私有字段是通过属性设置的:
Object alignment = attr.getAttribute(HTML.Attribute.ALIGN);