我只是想通过相对隐藏按钮。
Class userClass = Class.forName("vistas.RegistroPersonal");
Field f = userClass.getDeclaredField("btneliminar");
f.setAccessible(true);
f.setVisible(false);
有没有办法...字段没有setVisible方法...
答案 0 :(得分:0)
Field上的setVisible()方法不存在,您需要做的是获取setVisible(boolean)方法的引用(按其名称和参数类型),然后调用它:
public static void main(String[] args) throws Exception {
TestApplication application = new TestApplication();
Field field = TestApplication.class.getDeclaredField("button1");
// This will allow us to access the button1 field even if it's private
field.setAccessible(true);
Method method = JButton.class.getMethod("setVisible", Boolean.TYPE);
Object button = field.get(application);
method.invoke(button, Boolean.FALSE);
}
public static class TestApplication {
private JButton button1 = new JButton();
}
您首先需要一个实例,如果您从拥有按钮的对象开始,则可以通过Field获取其按钮,然后调用Method。如果从按钮实例开始,则可以调用方法。
请注意,反射似乎是在这里做事的一种复杂方法,等效方式很简单:
TestApplication application = new TestApplication();
application.button1.setVisible(false);
答案 1 :(得分:0)
要反射地调用Java Bean的属性(例如Swing组件),建议的方法是使用Introspector类。
前段时间,我编写了一个实用程序类BeanIntrospector,以帮助处理bean和属性:
BeanIntrospector.setPropertyValue("visible", Boolean.FALSE, button, null);
该库可从Maven Central获得:
<dependency>
<groupId>org.softsmithy.lib</groupId>
<artifactId>softsmithy-lib-beans</artifactId>
<version>2.0</version>
</dependency>
该库是开源的,代码可在GitHub上获得: https://github.com/SoftSmithy/softsmithy-lib