Java Swing组件下拉菜单控件JComboBox用法示例
本篇章节讲解Java Swing组件下拉菜单控件JComboBox用法。分享给大家供大家参考,具体如下: JComboBox是Swing中的下拉菜单控件。它永远只能选中一个项目,然而比单选按钮节省空间。如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框。注意,对选项的编辑只会影响当前项,而不会改变列表内容。可以使用addItem方法来添加选项列表,或者使用insertItemAt在任何位置插入选项;然而如果有大量选项需要添加,这种方法是非常笨重的,可以先构造一个DefaultComboBoxModel,使用addElement加载选项,最后在调用JComboBox的setModel方法。 常用方法如下: 示例代码: JComboBoxBasicUseDemo.java package awtDemo; 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; @SuppressWarnings("unused") public JComboBoxBasicUseDemo(){ setTitle("JComboBoxDemo - www.aspzz.cn"); setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); //添加label label = new JLabel("欢迎来到编程小技巧 www.aspzz.cn"); 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){ @SuppressWarnings({ "unchecked","rawtypes" }) JComboBox<String> comboBox = (JComboBox)e.getSource(); String fontName = comboBox.getSelectedItem().toString(); label.setFont(new Font(fontName,FONTSIZE)); System.out.printf("%s%n","actionPerformed called"); } } }; //popupMenuListener PopupMenuListener popupMenuListener = new PopupMenuListener() { @Override public void popupMenuCanceled(PopupMenuEvent e) { System.out.println("下拉菜单取消"); } @SuppressWarnings("unchecked") @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,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而相应地改变界面中的英文字体(如本例中的www.aspzz.cn)。运行效果如下: 下面分析JComboBox的事件响应。程序中使用了3个不同的事件响应函数,他们具有不同的特性。 ActionListener:它在eclipse和netBeans两个不同的IDE中表现出了不同的效果- -。在eclipse中,每当选中新节点时被激活;而在netBeans中,选择新节点时它总会被激活两次。 PopupMenuListener:它将选择节点的过程细分为3种类型:下拉菜单弹出;下拉菜单合上;下拉菜单取消。当点开下拉菜单,然后放弃选择时,则下拉菜单取消、下拉菜单合上两个事件先后被激活。 ItemListener:将节点的事件分为2种类型:SELECTED和DESELECTED。对于每种事件,均可以调用getItem()方法来获取相应节点。 因此,如果业务逻辑只关心最新被选中的节点,那么使用ItemListener是比较合适的。 更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》 希望本文所述对大家java程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |