Swing实例——星座选择器

我们知道下拉列表组件JComboBox可以选择列表中的其中一项并展示在下拉列表框中。而选择了列表项目要让程序执行什么动作,这就要用到监听:addItemListener(item的改变事件),具体是怎么操作的呢?今天我们就来一起做一个实例——星座选择器,一步一步的构建这个界面的组件和它们的监听事件

一、设计程序界面

首先设计一下程序界面,包括一个JFrame窗口,窗口中有一个JComboBox下拉列表,一个文本输入框,添加按钮,删除按钮,和信息展示区域在这里插入图片描述

二、编写程序界面

  1. 定义变量,定义需要用到的几个组件。
    在这里插入图片描述
  2. 在构造方法中初始化窗口,把各个组件显示出来。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三、添加监听类

  1. 分别给添加按钮、删除按钮和下拉框列表添加监听。
    在这里插入图片描述
  2. 编写下拉列表的监听类和对应的监听处理方法。
    在这里插入图片描述
  3. 编写添加按钮和删除按钮的监听类和对应的监听处理方法。 加完之后,点击按钮和选择下拉列表就会有对应的操作了。
    在这里插入图片描述
    在这里插入图片描述
  4. 代码如下:
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
 *综合练习:创建一个星座选择器:
 *下拉列表可以选择自己的星座、增加星座和删除星座
 */
public class Demo21_StarSelector {
	private JPanel panel=new JPanel();
	private JComboBox cmb=new JComboBox();    //创建JComboBox
	private JLabel label=new JLabel("添加新星座:");
	private JLabel showInfo=new JLabel();    //用于显示信息
	private JTextField jtf=new JTextField(16);    //用于输入信息
	private JButton buttonAdd=new JButton("新增");
	private JButton buttonDel=new JButton("删除");
	
	public Demo21_StarSelector() {
		showInfo.setFont(new Font("宋体",1,25));
		showInfo.setPreferredSize(new Dimension(500, 50));
		JFrame frame=new JFrame("选择你的星座");
		cmb.addItem("--请选择--");    //向下拉列表中添加一项
		cmb.addItem("巨蟹座");
		cmb.addItem("狮子座");
		cmb.addItem("双鱼座");
		panel.add(cmb);
		panel.add(label);
		panel.add(jtf);
		panel.add(buttonAdd);
		panel.add(buttonDel);
		panel.add(showInfo);
		frame.add(panel);
		buttonAdd.addActionListener(new MyActionListener(this));    //“添加”按钮的事件
		buttonDel.addActionListener(new MyActionListener(this));    //“删除”按钮的事件
		cmb.addItemListener(new MyItemListener(this));    //下拉列表的事件
		SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new Demo21_StarSelector();
	}
	
	public JLabel getShowInfo() {
		return showInfo;
	}
	public JPanel getPanel() {
		return panel;
	}
	public JTextField getJtf() {
		return jtf;
	}
	public JComboBox getCmb() {
		return cmb;
	}
}
//监听选中事件
class MyItemListener implements ItemListener{
	private Demo21_StarSelector demo21_StarSelector;
	public MyItemListener(Demo21_StarSelector demo21_StarSelector) {
		this.demo21_StarSelector = demo21_StarSelector;
	}
	@Override
	public void itemStateChanged(ItemEvent e){
		JPanel panel = demo21_StarSelector.getPanel();
		JLabel showInfo = demo21_StarSelector.getShowInfo();
		String str=e.getItem().toString();
		panel.add(showInfo);
		showInfo.setText("您选择的星座是:"+str);
	}
}
//监听添加和删除按钮事件
class MyActionListener implements ActionListener{
	private Demo21_StarSelector demo21_StarSelector;
	public MyActionListener(Demo21_StarSelector demo21_StarSelector) {
		this.demo21_StarSelector = demo21_StarSelector;
	}
	@Override
	public void actionPerformed(ActionEvent e){
		JTextField jtf = demo21_StarSelector.getJtf();
		JComboBox cmb = demo21_StarSelector.getCmb();
		JPanel panel = demo21_StarSelector.getPanel();
		JLabel showInfo = demo21_StarSelector.getShowInfo();
		String command=e.getActionCommand();
		//添加按钮处理
		if(command.equals("新增")){
			if(jtf.getText().length()!=0){
				cmb.addItem(jtf.getText());    //添加项
				panel.add(showInfo);
				showInfo.setText("添加成功,新增了:"+jtf.getText());
			}
			else{
				panel.add(showInfo);
				showInfo.setText("请输入要添加星座");
			}
		}
		//删除按钮处理
		if(command.equals("删除")){
			if(cmb.getSelectedIndex()!=-1){
				//先获得要删除的项的值
				String strDel=cmb.getSelectedItem().toString();
				if(strDel.contentEquals("--请选择--")) {
					showInfo.setText("请选择要删除的星座");
				}else {
					cmb.removeItem(strDel);    //删除项
					panel.add(showInfo);
					showInfo.setText("删除成功,删除了:"+strDel);
				}
			}
			else{
				panel.add(showInfo);
				showInfo.setText("请选择要删除的星座");
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值