本文介绍如何访问java核心包中的包可访问成员。包可访问性的成员和方法指的是在声明成员或方法时没有加public、protected和private等访问修饰词的成员和方法。包可访问性的成员可以被同一个包中的其他类所访问。本文以BorderLayout中的center变量为例,简单介绍如何访问java核心包中的包可访问成员。
1、为了访问BorderLayout中的center变量,我们编写一个AwtHelper类,将其包声明为java.awt,即和BorderLayout所在的包同名。代码如下
package java.awt;
import javax.swing.JButton;
import javax.swing.JFrame;
public class AwtHelper {
public static Component getChild(BorderLayout layout,String key) {
Component result = null;
if(key == BorderLayout.NORTH)
result = layout.north;
else if(key == BorderLayout.SOUTH)
result = layout.south;
else if(key == BorderLayout.EAST)
result = layout.east;
else if(key == BorderLayout.WEST)
result = layout.west;
else if(key == BorderLayout.CENTER)
result = layout.center;
return result;
}
public static void main(String[] args) {
Container container = createTestContainer();
if( container.getLayout() instanceof BorderLayout) {
BorderLayout layout = (BorderLayout)container.getLayout();
Component center = AwtHelper.getChild(layout, BorderLayout.CENTER);
System.out.println("Center Component = " + center);
}
}
public static Container createTestContainer() {
JFrame frame = new JFrame();
Container con = frame.getContentPane();
con.setLayout(new BorderLayout());
con.add(new JButton("Center"),BorderLayout.CENTER);
return con;
}
}
2、将AwtHelper.java 编译后,将该类加入启动类路径 运行命令 java -Xbootclasspath/p:. java.awt.AwtHelper
Center Component = javax.swing.JButton[,0,0,0x0,invalid,alignmentX=0.0,alignment
Y=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1adc30,f
lags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,dis
abledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom
=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,
rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Center,defaultCapable=tru
e]