【问题标题】:How to change Flowlayout via ItemListener如何通过 ItemListener 更改 Flowlayout
【发布时间】:2013-08-19 12:59:50
【问题描述】:

我不能使用分组复选框来更改 FlowLayout 的对齐方式。 我确定选中该复选框将进入“itemStateChanged”方法,但 .setAlignment() 或 .setLayout() 都不起作用! 有什么方法可以解决这个问题吗? 谢谢。

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

【问题讨论】:

    标签: java awt flowlayout


    【解决方案1】:
    • LayoutManager 尚未实现任何、部分或整个容器重新布局的通知器

    • 必须通过 container.validate() 通知 LayoutManager;和 container.repaint(); (在 Java7 中也可以对 JFrame 使用 revalidate())

    • 必须通过添加 WindowKistener 来杀死当前的 JVM 实例(只覆盖那里的 kill JVM)

    • 在史前 AWT 上使用 Swing

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

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多