-3

在这里,我想在 B 类中注册 newBTN 的动作监听器。

注意 :: newBTN 未添加且未初始化。此外,A 类不在我的控制范围内,无法更改。

class A {
    private JButton newBTN = null;
}

如何访问 A 类的 newBTN,以便从 B 类注册 newBTN 的动作侦听器?

class B {
}
4

2 回答 2

2

反射将允许您访问现有类的字段。

警告:这是一种非常糟糕的做法,在开始这条道路之前,您应该尝试探索所有可能的途径。这可能会严重损害您正在访问的类的功能。你必须问自己,“为什么这个领域是私有的?”

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;

    }
}
于 2013-01-30T08:54:48.983 回答
0

您需要考虑很多事情。

  1. A 类的实例应该可以被 B 类访问,或者 B 类的实例应该能够创建 A 类的实例。
  2. 在 A 类中创建按钮的实例。
  3. 在 A 类中编写“getter”方法,该方法将返回 A 中的按钮实例(请记住,您必须在此之前完成第 2 步。如果您不在 A 类中创建按钮实例,您将从 getter 方法返回 null 并且它将导致 NullPointerException)。
  4. 从类 B 的实例调用此 getter 方法。
  5. 在 getter 方法返回的按钮对象上添加动作监听器。
于 2013-01-30T08:39:18.647 回答