2013-08-19 13 views
1

我無法使用分組複選框來更改FlowLayout的對齊方式。 我確定選擇複選框會進入「itemStateChanged」方法,但.setAlignment()或.setLayout()都不起作用! 有什麼方法可以解決這個問題? 謝謝。如何通過ItemListener更改Flowlayout

import java.awt.*; 
import java.awt.event.*; 
public class flowlayout 
{ 
static Checkbox cb1 = new Checkbox("Left"); 
static Checkbox cb2 = new Checkbox("Center"); 
static Checkbox cb3 = new Checkbox("Right");  
static Frame frm = new Frame("Frame Title");  

public static void main(String args[]) { 
    frm.setLayout(new FlowLayout()); 
    CheckboxGroup cg = new CheckboxGroup(); 
    cb1.setCheckboxGroup(cg); 
    cb2.setCheckboxGroup(cg); 
    cb3.setCheckboxGroup(cg);  
    cb1.addItemListener(new ItmLis()); 
    cb2.addItemListener(new ItmLis()); 
    cb3.addItemListener(new ItmLis());  
    frm.setSize(400,200); 
    frm.add(cb1); 
    frm.add(cb2); 
    frm.add(cb3); 
    frm.setVisible(true);  
} 

static class ItmLis implements ItemListener 
{ 
    public void itemStateChanged(ItemEvent e) 
    { 
     if(cb1.getState()==true) 
     { 
      frm.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     } 
     else if(cb2.getState()) 
     { 
      frm.setLayout(new FlowLayout(FlowLayout.CENTER)); 
     } 
     else if(cb3.getState()) 
     { 
      frm.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
     } 
    } 
} 
} 

回答

1
  • 的LayoutManager還沒有實現通知者有重新佈局對於任何部分或整個容器

  • 具有由container.validate通知的LayoutManager();和container.repaint(); (在Java7使用重新驗證()的JFrame的太)

  • 要殺死當前JVM實例通過添加WindowKistener(只壓倒殺JVM有)

  • 使用Swing在史前AWT

AWT版本

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.SwingUtilities; 

public class MyFlowLayout { 

    static Checkbox cb1 = new Checkbox("Left"); 
    static Checkbox cb2 = new Checkbox("Center"); 
    static Checkbox cb3 = new Checkbox("Right"); 
    static Frame frm = new Frame("Frame Title"); 

    public MyFlowLayout() { 
     frm.setLayout(new FlowLayout()); 
     CheckboxGroup cg = new CheckboxGroup(); 
     cb1.setCheckboxGroup(cg); 
     cb2.setCheckboxGroup(cg); 
     cb3.setCheckboxGroup(cg); 
     cb1.addItemListener(new ItmLis()); 
     cb2.addItemListener(new ItmLis()); 
     cb3.addItemListener(new ItmLis()); 
     frm.addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
     frm.setSize(400, 200); 
     frm.add(cb1); 
     frm.add(cb2); 
     frm.add(cb3); 
     frm.setVisible(true); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyFlowLayout fs = new MyFlowLayout(); 
      } 
     }); 
    } 

    private class ItmLis implements ItemListener { 

     @Override 
     public void itemStateChanged(ItemEvent e) { 
      if (cb1.getState() == true) { 
       frm.setLayout(new FlowLayout(FlowLayout.LEFT)); 
       validateLayout(); 
      } else if (cb2.getState()) { 
       frm.setLayout(new FlowLayout(FlowLayout.CENTER)); 
       validateLayout(); 
      } else if (cb3.getState()) { 
       frm.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
       validateLayout(); 
      } 
     } 

     public void validateLayout() { 
      frm.validate(); 
      frm.repaint(); 
     } 
    } 
} 

搖擺版本

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JRadioButton; 
import javax.swing.SwingUtilities; 

public class MyFlowLayout { 

    static JRadioButton cb1 = new JRadioButton("Left"); 
    static JRadioButton cb2 = new JRadioButton("Center"); 
    static JRadioButton cb3 = new JRadioButton("Right"); 
    static JFrame frm = new JFrame("Frame Title"); 

    public MyFlowLayout() { 
     frm.setLayout(new FlowLayout()); 
     ButtonGroup cg = new ButtonGroup(); 
     cg.add(cb1); 
     cg.add(cb2); 
     cg.add(cb3); 
     cb1.addItemListener(new ItmLis()); 
     cb2.addItemListener(new ItmLis()); 
     cb3.addItemListener(new ItmLis()); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // or WindowListener too 
     /*frm.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
     System.exit(0); 
     } 
     });*/ 
     frm.setSize(400, 200); 
     frm.add(cb1); 
     frm.add(cb2); 
     frm.add(cb3); 
     frm.setVisible(true); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyFlowLayout fs = new MyFlowLayout(); 
      } 
     }); 
    } 

    private class ItmLis implements ItemListener { 

     @Override 
     public void itemStateChanged(ItemEvent e) { 
      if (cb1.isSelected() == true) { 
       frm.setLayout(new FlowLayout(FlowLayout.LEFT)); 
       validateLayout(); 
      } else if (cb2.isSelected() == true) { 
       frm.setLayout(new FlowLayout(FlowLayout.CENTER)); 
       validateLayout(); 
      } else if (cb3.isSelected() == true) { 
       frm.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
       validateLayout(); 
      } 
     } 

     public void validateLayout() { 
      frm.validate(); 
      frm.repaint(); 
     } 
    } 
}