来自:gxexiu > 馆藏分类
配色: 字号:
getContentPane()的应用
2013-12-11 | 阅:  转:  |  分享 
  
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的快捷键
献花(0)
+1
(本文系gxexiu首藏)