我们知道下拉列表组件JComboBox可以选择列表中的其中一项并展示在下拉列表框中。而选择了列表项目要让程序执行什么动作,这就要用到监听:addItemListener(item的改变事件),具体是怎么操作的呢?今天我们就来一起做一个实例——星座选择器,一步一步的构建这个界面的组件和它们的监听事件
一、设计程序界面
首先设计一下程序界面,包括一个JFrame窗口,窗口中有一个JComboBox下拉列表,一个文本输入框,添加按钮,删除按钮,和信息展示区域
二、编写程序界面
- 定义变量,定义需要用到的几个组件。
- 在构造方法中初始化窗口,把各个组件显示出来。
三、添加监听类
- 分别给添加按钮、删除按钮和下拉框列表添加监听。
- 编写下拉列表的监听类和对应的监听处理方法。
- 编写添加按钮和删除按钮的监听类和对应的监听处理方法。 加完之后,点击按钮和选择下拉列表就会有对应的操作了。
- 代码如下:
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("请选择要删除的星座");
}
}
}
}