本文介绍如何访问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;
}
}
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]
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]