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是比较合适的。

  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/pzy4447/p/4641463.html
Copyright © 2011-2022 走看看