我当前正在用SynthLookAndFeel修改GUI,并且在绘制表格时需要重新绘制表格Grid,但是此方法在JDK中是私有的,当通过反射检索到“ paintGrid”方法时,无法调用该方法(太复杂而无法覆盖其他公共方法绘制表格网格。
答案 0 :(得分:1)
您应该寻找一种不需要使用内部API的解决方案,因为它很脆弱,并且在任何次要的Java更新中都可能失败。就是说...检索<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="10dp"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/image" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet..."
android:textSize="20dp" />
<Button
android:id="@+id/dismiss"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
</LinearLayout>
实例后,在其上调用Method
-这样您就可以调用它。
在JDK 9和更高版本上,这会在控制台上警告您正在使用内部API-在将来的Java版本(可能早于12)中,将禁止访问,并且代码将因异常而失败。要解决警告和错误,请将命令行标志setAccessible(true)
(如果创建了--add-opens java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
,请用模块的名称替换)到启动应用程序的ALL-UNNAMED
命令中。