java container getcontentpane_Swing中的getContentPane()方法 | 学步园

这时我们注意到上面输出的JFrame的背景颜色并不是黑色而是白色, 也就是说上面的setBackground(Color.BLACK)编译后

该JFrame的背景颜色并没有被显示, 如果要让JFrame背景颜色为黑色--grid之间颜色为黑色还需要调用getContentPane(),

getContentPane().setBackground(Color.BLACK);

如下面输出:

tt1102_colorframe3.gif

import javax.swing.JFrame;

import javax.swing.JPanel;

import java.awt.GridLayout;

import java.awt.Color;

public class FrameTest extends JFrame {

// 注意在1.4及其以前版本中可以编译,但是运行有问题

// 5.0版本运行正常

FrameTest() {

super("Test");

// this.setBackground(Color.BLACK);

getContentPane().setBackground(Color.BLACK);

setLayout(new GridLayout(6, 6, 2, 2)); // 1.4中问题 1

getContentPane().setLayout(new GridLayout(6, 6, 2, 2)); // 1.4中问题 1

for (int i = 0; i < 36; i++) {

JPanel jPanel = new JPanel();

jPanel.setBackground(new Color((int) (Math.random() * 16777215)));

// add(jPanel); // 1.4中问题 2

getContentPane().add(jPanel);

}

setSize(400, 400);

setVisible(true);

}

public static void main(String[] args) {

new FrameTest();

}

}

下面的这个程序也会很好解释现象

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

/*

FlowLayout()建立一个新的Flow Layout,此FlowLayout默认值是居中对齐,组件彼此有5单位的水平与垂直间距。

FlowLayout(int align)建立一个新的Flow Layout,此FlowLayout可设置排列方式,组件彼此有5单位的水平与垂直 间距。

FlowLayout(int align,int hgap,int vgap)建立一个新的Flow Layout,此FlowLayout可设置排列方式与组件间距。

*/

public class FlowLayoutDemo {

public FlowLayoutDemo() {

JFrame f = new JFrame();

/*

* 你可以使用有间距的FlowLayout构造函数,使FlowLayout的排列具有间距,并

* 并可利用排列方向参数来指定靠什么方向排列,FlowLayout共有五种排列方式,

* 依次是CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第13

* 行改成contentPane.setLayout(new FlowLayout(FlowLayout.LEFT));

*/

/*

* Container contentPane=f.getContentPane(); contentPane.setLayout(new

* FlowLayout()); contentPane.add(new JButton("first"));

* contentPane.add(new JButton("second")); contentPane.add(new

* JButton("third")); contentPane.add(new JButton("fourth"));

* contentPane.add(new JButton("fifth")); contentPane.add(new

* JButton("Last"));

*/

Container contentPane = f.getContentPane();

contentPane.setLayout(new FlowLayout());

// setLayout(new FlowLayout());

JPanel jPanel = new JPanel();

jPanel.add(new JButton("first"));

// f.add(new JButton("first"));

f.add(new JButton("second"));

f.add(new JButton("third"));

f.add(new JButton("fourth"));

f.add(new JButton("fifth"));

f.add(new JButton("Last"));

f.setTitle("FlowLayout");

// f.pack();//必须将f.pach()去掉,否则setSize功能将没有作用

f.setSize(400, 220);

f.setVisible(true);

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

private void setLayout(FlowLayout flowLayout) {

// TODO Auto-generated method stub

}

public static void main(String[] args) {

FlowLayoutDemo b = new FlowLayoutDemo();

}

}

发现在javaSE1.4之中不能直接在JFrame当中直接使用.setLayout .setBackground   .add(JPanel)  方法

需要使用Container   contentPane = f.getContentPane();方法获得Container对象  然后contentPane使用上述方法,亦可直接使用getContentPane()进行添加


版权声明:本文为weixin_35920143原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。