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");
setBackground(Color.BLACK);
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
}
setSize(400,400);
setVisible(true);
}
public static void main(String[] args){
new FrameTest();
}
}
这时我们注意到上面输出的JFrame的背景颜色并不是黑色而是白色, 也就是说上面的setBackground(Color.BLACK)编译后
该JFrame的背景颜色并没有被显示, 如果要让JFrame背景颜色为黑色--grid之间颜色为黑色还需要调用getContentPane(),
getContentPane().setBackground(Color.BLACK);
如下面输出:
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()进行添加
所有评论(0)