Swing中的getContentPane()方法
在过去的J2SE版本中,部件(components)不能直接添加到最高级(toplevel)的Swing容器,这些容器包括:JFrame,JDialog,JWindow,JApplet和JInternalFrame.如现在有一个JFrame的instance命名为aFrame。要添加一个命名为aComponent的部件(如一个JPanel)到JFrame里。以往需要调用JFrame的getContentPane()办法。如下:
aFrame.getContentPane().add(aComponent)?
在J2SE5.0中,我们可以直接添加部件到最高级的Swing容器,也可以直接在容器内设置布局管理(LayoutManager)和删除部件。这个变化允许我们可以省去调用getContentPane()而直接在容器内应用add(),setLayout()和remove()。然而,还是不能忽略了ContentPane,即使可能将不会再使用ContentPane来添加部件到容器。????????先看一个以往在J2SE1.4及其以前的版本经常应用到的例子。要设置一个JFrame的布局管理而且添加一些部件到该JFrame。查看api关于JFrame的文件可发现,JFrame从java.awt.Container继承了add()办法.该add()是用来添加一个部件到JFrame容器.Container类里也包含setLayout()办法,该setLayout()是用来设置继承者(比如上面的JFrame容器)的布局管理。
下面是一个简单的例子:?
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjava.awt.GridLayout;
importjava.awt.Color;
publicclassFrameTestextendsJFrame{
//注意在1.4及其以前版本中可以编译,但是运行有问题
//5.0版本运行正常
FrameTest(){
super("Test");
setBackground(Color.BLACK);
setLayout(newGridLayout(6,6,2,2));//1.4中问题1
for(inti=0;i<36;i++){
JPaneljPanel=newJPanel();
jPanel.setBackground(newColor(
(int)(Math.random()16777215)));
add(jPanel);//1.4中问题2
}
setSize(400,400);
setVisible(true);
}
publicstaticvoidmain(String[]args){
newFrameTest();
}
}
输出入下:
这时注意到上面输出的JFrame的背景颜色并不是黑色而是白色,也就是说上面的setBackground(Color.BLACK)编译后该JFrame的背景颜色并没有被显示,如果要让JFrame背景颜色为黑色--grid之间颜色为黑色还需要调用getContentPane(),
getContentPane().setBackground(Color.BLACK);?如下面输出:
?详细的新版本swing操作请到sun的java论坛查询.
KeyStroke类的getKeyStroke(Strings)方法KeyStrokectrlP=KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK);//后面参数表示什么?menuItem.setAccelerator(ctrlP);//这个函数表示什么?
后面的参数表示ctrl和p同时按下时的动作。menuItem.setAccelerator(ctrlP);这个方法的意思是当按下ctrl+p时,就相当于点击了menuItem,也就是menuItem的快捷键 |
|