ここでは newBTN の Action Listener をクラス B に登録したいと思います。
注:: newBTN は追加されず、初期化されません。また、クラス A は私の管理外であり、変更できません。
class A {
private JButton newBTN = null;
}
クラス A の newBTN にアクセスして、クラス B から newBTN のアクション リスナーを登録するにはどうすればよいですか?
class B {
}
ここでは newBTN の Action Listener をクラス B に登録したいと思います。
注:: newBTN は追加されず、初期化されません。また、クラス A は私の管理外であり、変更できません。
class A {
private JButton newBTN = null;
}
クラス A の newBTN にアクセスして、クラス B から newBTN のアクション リスナーを登録するにはどうすればよいですか?
class B {
}
リフレクションを使用すると、既存のクラスのフィールドにアクセスできます。
警告: これは非常に悪い習慣であり、この方法に着手する前に、考えられるすべての手段を検討する必要があります。これにより、アクセスしているクラスの機能が著しく損なわれる可能性があります。「なぜこのフィールドがプライベートなのか?」と自問する必要があります。
public class TestReflection {
public static void main(String[] args) {
new TestReflection();
}
public TestReflection() {
PrivateAccessOnly instance = new PrivateAccessOnly();
try {
Field field = PrivateAccessOnly.class.getDeclaredField("field");
field.setAccessible(true);
System.out.println("Current value = " + field.get(instance));
field.set(instance, new JButton("Testing"));
System.out.println("New value = " + field.get(instance));
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exp) {
exp.printStackTrace();
}
}
public class PrivateAccessOnly {
private JButton field;
}
}
考慮しなければならないことがたくさんあります。