import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;import javax.swing.*;
import javax.swing.border.TitledBorder;
public class FlowDemo extends JFrame{
private FlowPanel p;
private ChangedLayout cl;
FlowDemo()
{
p = new FlowPanel();
cl = new ChangedLayout(p);
setLayout(new GridLayout(2,1));
getContentPane().add(p);
getContentPane().add(cl);
setSize(700,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
int width=(screenSize.width-getWidth())/2;
int height=(screenSize.height-getHeight())/2;
setLocation(width,height);
}
         public static void main(String[] args) {
new FlowDemo();
}
}
class FlowPanel extends JPanel{
private JButton jb[] = new JButton[15];
private GridLayout lm;
public FlowPanel()
{
lm = new GridLayout(3,5);
setBorder(new TitledBorder("JButton"));
setLayout(lm);
for (int i = 0; i < jb.length; i++) {
            
jb[i] = new JButton("Compontent"+String.valueOf(i));
add(jb[i]);
}

}
public GridLayout getLayout(){
return lm;
}
public JButton[] getJbutton(){
return jb;
}
}
class ChangedLayout extends JPanel implements ActionListener,ItemListener{
private JLabel jlb1;
private JLabel jlb2;
private JLabel jlb3;
private JTextField jtf2;
private JTextField jtf3;
private JComboBox jck;
    private FlowPanel p;
private JButton jbt[];
ChangedLayout(FlowPanel p){
this.p=p;
setBorder(new TitledBorder("FlowLay"));
Object s [] ={"Center","Left","Right"};
jlb1 = new JLabel("Alignment");
jlb2 = new JLabel("Hgap");
jlb3 = new JLabel("Vgap");
jtf2 = new JTextField();
jtf3= new JTextField();
jck = new JComboBox(s);
JPanel jp1 = new JPanel(new GridLayout(3,1));
JPanel jp2 = new JPanel(new GridLayout(3,1));
jtf2.addActionListener(this);
jtf3.addActionListener(this);
jck.addItemListener(this);
jp1.add(jlb1);
jp1.add(jlb2);
jp1.add(jlb3);
jp2.add(jck);
jp2.add(jtf2);
jp2.add(jtf3);
setLayout(new BorderLayout());
add(jp1,BorderLayout.WEST);
add(jp2,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String s =e.getActionCommand();
if(s=="jtf2")
{
    p.getLayout().setHgap(Integer.parseInt(jtf2.getText()));
    p.revalidate();
}
if(s=="jtf3")
{
    p.getLayout().setVgap(Integer.parseInt(jtf3.getText()));
     p.revalidate();
}

}
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
jbt = p. getJbutton();
String s= e.paramString();
for (int i = 0; i < jbt.length; i++) {
if(s.equals("Left"))
jbt[i].setHorizontalTextPosition(JButton.LEFT);
if(s.equals("Center"))
jbt[i].setHorizontalTextPosition(JButton.CENTER);
if(s.equals("Right"))
jbt[i].setHorizontalTextPosition(JButton.RIGHT);
}
}
}
我想在文本区中 输入数字改变 按钮之间的间距 和改变排列方式 
没有语法错误 但就是不能达到目的
应该是事件驱动有问题 我找到了 帮帮我