import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; public class test_shu extends JPanel{ private JPanel center = new JPanel(new FlowLayout()); private testPanel[] t = new testPanel[5]; public test_shu() { init(); this.setPreferredSize(new Dimension(210, 500)); this.setLayout(new BorderLayout()); this.add(center,BorderLayout.CENTER); } private void init() { for(int i=0;i<5;i++){ t[i] = new testPanel(); center.add(t[i]); } } public static void main(String[] args) { JFrame f = new JFrame(); f.setSize(210, 500); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(new test_shu()); f.setLocation(500, 80); f.pack(); f.setVisible(true); } } class testPanel extends JPanel{ public testPanel() { this.setBorder(BorderFactory.createLineBorder(Color.red)); this.setSize(200, 30); this.setPreferredSize(new Dimension(200, 30)); this.setMaximumSize(new Dimension(200, 30)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.BLUE); g2d.fillRect(0, 0, this.getWidth(), this.getHeight()); } @Override public Dimension getPreferredSize() { return new Dimension(200, 30); } }
上面的代码显示5个testPanel类型的JPanel,结果如下,可是这5个JPnael之间都有空隙,而我的代码中并没有设置这些空隙,这是什么原因?怎么让它消失?小弟刚学还不太明白
1.布局首先要理清思路,那一个组件放在哪个组件里面,就如你的代码他们分别是 JFrame f中放置了JPanel center,而JPanel center中又放置了5个testPanel[] t = new testPanel[5];
也就是说,你的5个test_shu对象的位置由center容器的布局方式决定即你的代码22行处 private JPanel center = new JPanel(new FlowLayout());
这个布局方式决定,所以,而FlowLayout的布局方式的默认值是:
流式布局管理器把容器看成一个行集,好象平时在一张纸上写字一样,一行写满就换下一行。行高是用一行中的控件高度决定的。FlowLayout是所有 JApplet/JApplet的默认布局。在生成流式布局时能够指定显示的对齐方式,默认情况下是居中(FlowLayout.CENTER)
FlowLayout() //生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离.
FlowLayout(int alinment) //可以设定每行组件的对齐方式.
FlowLayout(int alignment,int horz,int vert) //设定对齐方式并设定组件水平和垂直的距离.
当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化.
所以要达到你的效果,只需要将
22行处的代码改成如下设置就可以了:
[color=red]private JPanel center = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));[/color]