Java Swing组件下拉菜单控件JComboBox用法示例

 更新时间:2017年11月15日 09:57:27   作者:pzy4447  
这篇文章主要介绍了Java Swing组件下拉菜单控件JComboBox用法,结合具体实例形式分析了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.jb51.net");
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    //添加label
    label = new JLabel("欢迎来到脚本之家 www.jb51.net");
    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, Font.PLAIN, 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, 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而相应地改变界面中的英文字体(如本例中的www.jb51.net)。运行效果如下:

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

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

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

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

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

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Spring的Ioc模拟实现详细介绍

    Spring的Ioc模拟实现详细介绍

    这篇文章主要介绍了Spring的Ioc模拟实现详细介绍,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Druid核心源码解析DruidDataSource

    Druid核心源码解析DruidDataSource

    这篇文章主要为大家介绍了Druid核心源码解析DruidDataSource,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • mybatis-plus复合主键的使用

    mybatis-plus复合主键的使用

    本文主要介绍了mybatis-plus复合主键的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SpringBoot集成Swagger使用SpringSecurity控制访问权限问题

    SpringBoot集成Swagger使用SpringSecurity控制访问权限问题

    这篇文章主要介绍了SpringBoot集成Swagger使用SpringSecurity控制访问权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Springboot 整合 Java DL4J 实现时尚穿搭推荐系统(实例代码)

    Springboot 整合 Java DL4J 实现时尚穿搭推荐系统(实例代码)

    本文介绍了如何使用SpringBoot和JavaDeeplearning4j框架搭建一个时尚穿搭推荐系统,文章详细阐述了系统的技术架构、数据集格式、Maven依赖配置、模型训练和预测代码实现,以及单元测试和预期输出结果
    2024-10-10
  • 详解Java并发编程基础之volatile

    详解Java并发编程基础之volatile

    volatile作为Java多线程中轻量级的同步措施,保证了多线程环境中“共享变量”的可见性。这里的可见性简单而言可以理解为当一个线程修改了一个共享变量的时候,另外的线程能够读到这个修改的值。本文将详解介绍Java并发编程基础之volatile
    2021-06-06
  • 详细谈谈Spring事务是如何管理的

    详细谈谈Spring事务是如何管理的

    在使用传统的事务编程策略时,程序代码必然和具体的事务操作代码耦合,而使用Spring事务管理策略恰好可以避免这种尴尬,Spring的事务管理提供了两种方式:编程式事务管理和声明式事务管理,这篇文章主要给大家介绍了关于Spring事务是如何管理的相关资料,需要的朋友可以参考下
    2021-09-09
  • 详解springmvc如何处理接受http请求

    详解springmvc如何处理接受http请求

    这篇文章主要给大家介绍了springmvc如何处理接受http请求,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • JAVA8之函数式编程Function接口用法

    JAVA8之函数式编程Function接口用法

    这篇文章主要介绍了JAVA8之函数式编程Function接口用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • SpringMVC 参数绑定之视图传参到控制器的实现代码

    SpringMVC 参数绑定之视图传参到控制器的实现代码

    这篇文章主要介绍了SpringMVC 参数绑定之视图传参到控制器的相关知识,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论