2012-02-25 5 views
0

javax.swing.text.html.ImageView; ライン111および258から267
http://javasourcecode.org/html/open-source/jdk/jdk-6u23/javax/swing/text/html/ImageView.java.htmlJavaのプライベートフィールドへのアクセス

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: error: vAlign has private access in ImageView layeredPane.vAlign = 2.0;

は、私はそれをどのように修正すればよいですか?私は2.0の価値を置く必要があります

答えて

6

あなたは私的な実装の詳細を取得しようとしないで修正します。基本的にこれをしてはいけません。あなたのコードはまだこのバージョンのImageViewを使用していても壊れやすくなり、バージョン間の変更に脆弱です。それがプライベートであることの全ポイントは、に停止あなたがそれに直接アクセスすることです。

あなたprivateStringField.setFloat(layeredPane, 2.0f)を落ちることができますが、私はそれに対して強くアドバイスをします。

(それはそれはフロートフィールドだときの方法により、privateStringFieldそれを呼び出すために奇妙だ...)

+0

にjava.lang.IllegalAccessException:私はそれがあることを理解し、クラスが修飾子を持つクラスjavax.swing.text.html.ImageViewのメンバーにアクセスすることができない「プライベート」悪いですが、作ることが非常に必要です。おそらく私自身のメソッドを追加する方法や、protected void setPropertiesFromAttributesを変更する方法がありますか? – user1221483

+0

@ user1221483: 'setAccessible(true)'を呼び出した後に*あなたはそれを取得していますか?私はそれが*必要であることを確信していません - あなたは、より多くのレイアウトを介して、違ったやり方で達成しようとするべきもののような気がします。 –

+0

pardon、java.lang.IllegalArgumentException:floatフィールドをjavax.swing.text.html.ImageView.vAlignに(double)0.5に設定できません。私はprivateStringField.setFloat(layeredPane、(float)0.75)を使用します。エラーはありませんし、うまくいきません: '( – user1221483

3

まず第一に、なぜあなたは2.0を使用したいのでしょうか?私は、vAlignがそれぞれ1.0f、0.5f、0.0fを保持するBOTTOM_ALIGNMENT、CENTER_ALIGNMENT、TOP_ALIGNMENTにjava.awt.Component contantsを使用しているので、2.0の値はあまり意味がないと考えました。

それにもかかわらず、プライベートフィールドなので、それを直接操作して適切な手段で変更しないでください。このプライベートフィールドは、属性を経由して設定されていることが表示されます:

Object alignment = attr.getAttribute(HTML.Attribute.ALIGN); 
+0

私は間違いを犯しました0.75の値 – user1221483

+0

@ user1221483:なぜですか?0.75は何を意味していますか?上、中、下の3つの垂直HTMLイメージタグアライメント属性があります。 。 –

+0

@HovercraftFullOfEels HALFWAY_BETWEEN_MIDDLE_AND_BOTTOM_ALIGNMENT :) – biziclop

関連する問題