zoukankan      html  css  js  c++  java
  • Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件。它永远只能选中一个项目,然而比单选按钮节省空间。如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框。注意,对选项的编辑只会影响当前项,而不会改变列表内容。可以使用addItem方法来添加选项列表,或者使用insertItemAt在任何位置插入选项;然而如果有大量选项需要添加,这种方法是非常笨重的,可以先构造一个DefaultComboBoxModel,使用addElement加载选项,最后在调用JComboBox的setModel方法。

    常用方法如下:

    示例代码:

    JComboBoxBasicUseDemo.java

    package JComboBoxBasicUse;
    import java.awt.BorderLayout;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.event.PopupMenuEvent;
    import javax.swing.event.PopupMenuListener;
    
    /*
     * 演示JComboBox的基本用法,以及事件响应
     */
    public class JComboBoxBasicUseDemo extends JFrame{
        private static final long serialVersionUID = -8161981948004677531L;
        int DEFAULT_WIDTH = 600;
        int DEFAULT_HEIGHT = 400;
        private JLabel label;
        private JComboBox<String> faceCombo;
        private static final int FONTSIZE = 12;    
        
        public JComboBoxBasicUseDemo(){
            setTitle("JComboBoxDemo");
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
            
            //添加label
            label = new JLabel("The quick brown fox jumps over the lazy dog.");
            label.setFont(new Font("Serif",Font.PLAIN, FONTSIZE));
            add(label, BorderLayout.CENTER);
            
            //actionListener
            ActionListener actionListener = new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    if(e.getSource() instanceof JComboBox){
                        JComboBox<String> comboBox = (JComboBox)e.getSource();
                        String fontName = comboBox.getSelectedItem().toString();
                        label.setFont(new Font(fontName, Font.PLAIN, FONTSIZE));
                        System.out.printf("%s%n", "actionPerformed called");
                    }
                }
            };
            
            //popupMenuListener
            PopupMenuListener popupMenuListener = new PopupMenuListener() {
                @Override
                public void popupMenuCanceled(PopupMenuEvent e) {
                    System.out.println("下拉菜单取消");
                }
    
                @Override
                public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                    System.out.println("下拉菜单合上");
                    JComboBox<String> source = (JComboBox<String>)e.getSource();
                }
    
                @Override
                public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
                    System.out.println("下拉菜单弹出");
                }
            };
            
            //itemListener
            ItemListener itemListener = new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent arg0) {
                    // TODO Auto-generated method stub
                    if(ItemEvent.SELECTED == arg0.getStateChange()){
                        String selectedItem = arg0.getItem().toString();
                        label.setFont(new Font(selectedItem, Font.PLAIN, FONTSIZE));
                        System.out.printf("new selected item : %s%n",selectedItem);
                    }
                    if(ItemEvent.DESELECTED == arg0.getStateChange()){
                        String selectedItem = arg0.getItem().toString();
                        System.out.printf("deselected item : %s%n",selectedItem);
                    }
                }
                };
                
            //添加一个JComboBox
            faceCombo = new JComboBox<String>();
            faceCombo.setEditable(true);
            //faceCombo.addActionListener(actionListener);
            //faceCombo.addPopupMenuListener(popupMenuListener);
            faceCombo.addItemListener(itemListener);
            faceCombo.setEnabled(true);
            faceCombo.addItem("Serif");
            faceCombo.addItem("SansSerif");
            faceCombo.addItem("Monospaced");
            faceCombo.addItem("Dialog");
            faceCombo.addItem("DialogInput");
            
            add(faceCombo, BorderLayout.SOUTH);
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //创建窗体并指定标题
            JComboBoxBasicUseDemo frame = new JComboBoxBasicUseDemo();
            //关闭窗体后退出程序
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //自动适配所有控件大小
            //frame.pack();
            //设置窗体位置在屏幕中央
            frame.setLocationRelativeTo(null);
            //显示窗体
            frame.setVisible(true);
        }
    }

    本程序的基本功能是,通过选择不同的item而相应地改变界面中的字体。运行效果如下:

    下面分析JComboBox的事件响应。程序中使用了3个不同的事件响应函数,他们具有不同的特性。

    ActionListener:它在eclipse和netBeans两个不同的IDE中表现出了不同的效果- -。在eclipse中,每当选中新节点时被激活;而在netBeans中,选择新节点时它总会被激活两次。

    PopupMenuListener:它将选择节点的过程细分为3种类型:下拉菜单弹出;下拉菜单合上;下拉菜单取消。当点开下拉菜单,然后放弃选择时,则下拉菜单取消、下拉菜单合上两个事件先后被激活。

    ItemListener:将节点的事件分为2种类型:SELECTED和DESELECTED。对于每种事件,均可以调用getItem()方法来获取相应节点。

    因此,如果业务逻辑只关心最新被选中的节点,那么使用ItemListener是比较合适的。

  • 相关阅读:
    模块化工具require 学习笔记
    学习Jade模板引擎
    通过border来实现各种三角符号
    使用vscode 编译 sass
    Javascript 运行机制
    Vue调试工具 vue-devtools
    MVVM框架
    通信类
    面向对象
    原型和原型链
  • 原文地址:https://www.cnblogs.com/pzy4447/p/4641463.html
Copyright © 2011-2022 走看看