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); 



我想在文本区中 输入数字改变 按钮之间的间距 和改变排列方式  
没有语法错误 但就是不能达到目的 
应该是事件驱动有问题 我找到了 帮帮我