Swing中如何实现二级联动下拉列表

简介: 笔记

简言之,比如说第一个框里有广东,江苏,安徽各省,第二个下拉框里有广东省的各个城市,比如广州,深圳之类的

见代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
public class MyFrame extends JFrame {
    //    声明下来列表JComboBox
    private JComboBox choice1;
    private JComboBox choice2;
    //定义一个数组
    private static String[] s1 = {"中国","美国","日本","澳大利亚","法国","德国","英国"};
    private static String[][] s2 = {
            {"北京","上海","广州","深圳"},
            {"华盛顿","纽约","芝加哥","旧金山"},
            {"东京","大阪","名古屋","北海道"},
            {"悉尼","堪培拉","珀斯"},
            {"巴黎","南特","德勒","鲁昂"},
            {"柏林","华沙","卢布林","波兹南"},
            {"伦敦","曼切斯特","诺丁汉","牛津"}
    };
    public MyFrame(String title){
        super(title);
        //        设置布局管理
        getContentPane().setLayout(new GridLayout(2,2,0,0));
//        创建标签
        JLabel label1 = new JLabel("选择你喜欢的国家:");
        label1.setHorizontalAlignment(SwingConstants.RIGHT);
        getContentPane().add(label1);
        //        实例化JComboBox对象
        choice1 = new JComboBox(s1);
        // 为组合框的选择动作注册监听事件,当此组合框的选择有变化时,另一个组合框自动更新内容
        choice1.addActionListener(e -> {
            choice2.removeAllItems();
            JComboBox cb = (JComboBox) e.getSource();
//            获得选择项目
            String itemString = (String) cb.getSelectedItem();
            System.out.println(itemString);
            int index = choice1.getSelectedIndex();
            for(int i=0; i<s2[index].length; i++) {
                choice2.addItem(s2[index][i]);
            }
        });
        getContentPane().add(choice1);
        //        创建标签
        JLabel label2 = new JLabel("选择城市:");
        label2.setHorizontalAlignment(SwingConstants.RIGHT);
        getContentPane().add(label2);
        //        实例化JComboBox对象
        choice2 = new JComboBox(s2[0]);
        //        注册Action事件监听,采用Lambda表达式
        choice2.addItemListener(e -> {
//            获得选择项目
            if (e.getStateChange() == ItemEvent.SELECTED){
//                获得选择项目
                String itemString = (String) e.getItem();
                System.out.println(itemString);
            }
        });
        getContentPane().add(choice2);
        //        设置窗口大小
        setSize(400,150);
//        设置窗口可见
        setVisible(true);
    }
}

调用代码:

public class HelloWorld {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame("下拉列表");
    }
}

运行结果:

5.png

相关文章
|
前端开发 JavaScript 安全
|
Java 测试技术 应用服务中间件
使用Maven构建一个项目时,通常按照以下六个步骤的顺序进行
使用Maven构建一个项目时,通常按照以下六个步骤的顺序进行
413 0
|
传感器 人工智能 机器人
|
存储 人工智能 边缘计算
AI时代下, 边缘云上的技术演进与场景创新
本文介绍了AI时代下边缘云的技术演进与场景创新。主要内容分为三部分:一是边缘云算力形态的多元化演进,强调阿里云边缘节点服务(ENS)在全球600多个节点的部署,提供低时延、本地化和小型化的价值;二是边缘AI推理的创新发展与实践,涵盖低时延、资源广分布、本地化及弹性需求等优势;三是云游戏在边缘承载的技术演进,探讨云游戏对边缘计算的依赖及其技术方案,如多开技术、云存储和网络架构优化,以提升用户体验并降低成本。文章展示了边缘云在未来智能化、实时化解决方案中的重要性。
622 3
|
Java Android开发 UED
🧠Android多线程与异步编程实战!告别卡顿,让应用响应如丝般顺滑!🧵
在Android开发中,为应对复杂应用场景和繁重计算任务,多线程与异步编程成为保证UI流畅性的关键。本文将介绍Android中的多线程基础,包括Thread、Handler、Looper、AsyncTask及ExecutorService等,并通过示例代码展示其实用性。AsyncTask适用于简单后台操作,而ExecutorService则能更好地管理复杂并发任务。合理运用这些技术,可显著提升应用性能和用户体验,避免内存泄漏和线程安全问题,确保UI更新顺畅。
525 5
|
Java Docker 容器
SpringBoot Jar 包太大 瘦身 【终极版】
SpringBoot Jar 包太大 瘦身 【终极版】
1083 1
|
Java Maven
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
修改配置maven镜像仓库位置,将maven镜像更换成阿里镜像
13375 1
|
Java 测试技术 Spring
Spring Boot中的自定义注解应用
Spring Boot中的自定义注解应用
|
XML Android开发 UED