之前学习了动作监听器,现在做一个关于下拉列表的小程序。
创建一个下拉列表,一个文本框,一个删除按钮,一个添加按钮。
在文本框中输入游戏名称,点击添加按钮,下拉列表里会增加一个游戏,选择下拉列表的一个项,点击删除按钮,选择的项会从下拉列表中删去。
分步骤代码如下:
要导入的类:
import javax.swing.JFrame; //顶层容器 (框架)
import javax.swing.JPanel; //中间容器 (嵌板)最常用的面板
import javax.swing.JButton; //按钮
import javax.swing.JLabel; //标签
import javax.swing.JTextField; //单行文本框
import javax.swing.JComboBox; //下拉列表的类
import java.awt.event.ActionEvent; //动作事件
import java.awt.event.ActionListener; //动作监听者(要实现的接口,需要重写里面的actionPerformed方法)
import java.awt.event.ItemListener; //项目事件
import java.awt.event.ItemEvent; //项目监听者(要实现的接口,需要重写itemStateChanged方法)
创建窗口,面板,按钮,文本框,下拉列表,加两个标签。
JFrame jframe = new JFrame("动作监听"); //窗口
JPanel jpanel1 = new JPanel(); //面板
JButton jbutton1 = new JButton("添加"); //按钮1
JButton jbutton2 = new JButton("删除"); //按钮2
JTextField jtextfield1 = new JTextField("",15); //文本框
JLabel jlabel1 = new JLabel("输入新游戏:"); //标签1
JLabel jlabel2 = new JLabel(); //标签2
JComboBox<String> combo = new JComboBox<String>(); //下拉列表
向下拉列表添加3个游戏
combo.addItem("选择游戏");
combo.addItem("英雄联盟");
combo.addItem("守望先锋");
combo.addItem("穿越火线");
下面是重点
创建继承ActionListener接口的实现类,重写actionPerformed方法
下面用的是三种实现方法中的第一种,借助if-else语句实现
class myActionListener implements ActionListener
{
@Override //方法重写
public void actionPerformed(ActionEvent e)
{
String name = e.getActionCommand();//当发生动作时
//获取 做出响应的控件 的名称
//在这个程序中,是两个按钮“添加”和“删除”
if(name.equals("添加")) //判断是“添加”按钮还是“删除”按钮
{
if(jtextfield1.getText().length() != 0)//判断文本框是否为空,即是否有输入
{
combo.addItem(jtextfield1.getText());
jlabel2.setText("添加成功,添加了" + jtextfield1.getText());
}
else
{
jpanel1.add(jlabel2);
jlabel2.setText("请输入要添加的游戏");
}
}
else if(name.equals("删除"))
{
//下面这个函数判断下拉列表是否有 项 被选中,没有返还-1
if(combo.getSelectedIndex() != -1)
{
//或许被选中的 项 的名称
String del = combo.getSelectedItem().toString();
combo.removeItem(del); //从下拉列表中删除
jpanel1.add(jlabel2);
jlabel2.setText(" 删除成功");
}
else
{
jpanel1.add(jlabel2);
jlabel2.setText("请选择要删除的星座");
}
}
}
}
下拉列表和两个按钮添加监听器
combo.addItemListener(new myItemListener()); //下拉列表添加 项目监听器
//两个按钮都添加动作监听器
jbutton1.addActionListener(new myActionListener());
jbutton2.addActionListener(new myActionListener());
最后,进行添加的操作
jpanel1.add(combo); //下拉列表添加到面板
jpanel1.add(jlabel1); //标签1添加到面板
jpanel1.add(jtextfield1); //文本框添加入面板
jpanel1.add(jbutton1); //按钮1添加入面板
jpanel1.add(jbutton2); //按钮2添加入面板
jframe.add(jpanel1); //面板添加入窗口
运行结果:
完整的可运行的源代码:
import javax.swing.JFrame; //顶层容器 (框架)
import javax.swing.JPanel; //中间容器 (嵌板)最常用的面板
import javax.swing.JButton; //按钮
import javax.swing.JLabel; //标签
import javax.swing.JTextField; //单行文本框
import javax.swing.JComboBox; //下拉列表的类
import java.awt.event.ActionEvent; //动作事件
import java.awt.event.ActionListener; //动作监听者(要实现的接口,需要重写里面的actionPerformed方法)
import java.awt.event.ItemListener; //项目事件
import java.awt.event.ItemEvent; //项目监听者(要实现的接口,需要重写itemStateChanged方法)
public class example
{
public static void main(String[] args)
{
JFrame jframe = new JFrame("动作监听"); //窗口
jframe.setSize(500, 200); //设置窗口大小
JPanel jpanel1 = new JPanel(); //面板
JButton jbutton1 = new JButton("添加"); //按钮1
JButton jbutton2 = new JButton("删除"); //按钮1
JTextField jtextfield1 = new JTextField("",15); //用于显示的文本框,为15列
JLabel jlabel1 = new JLabel("输入新游戏:");
JLabel jlabel2 = new JLabel();
jtextfield1.setHorizontalAlignment(JTextField.RIGHT);
JComboBox<String> combo = new JComboBox<String>();
combo.addItem("选择游戏");
combo.addItem("英雄联盟");
combo.addItem("守望先锋");
combo.addItem("穿越火线");
jpanel1.add(combo);
jpanel1.add(jlabel1);
jpanel1.add(jtextfield1); //文本框添加入面板
jpanel1.add(jbutton1); //按钮1添加入面板
jpanel1.add(jbutton2); //按钮2添加入面板
jframe.add(jpanel1); //面板添加入窗口
class myItemListener implements ItemListener
{
@Override
public void itemStateChanged(ItemEvent e)
{
String str = e.getItem().toString();
jlabel2.setText("你选择的游戏是:" + str);
jpanel1.add(jlabel2);
}
}
class myActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
String name = e.getActionCommand();
if(name.equals("添加"))
{
if(jtextfield1.getText().length() != 0)
{
combo.addItem(jtextfield1.getText());
jlabel2.setText("添加成功,添加了" + jtextfield1.getText());
}
else
{
jpanel1.add(jlabel2);
jlabel2.setText("请输入要添加的游戏");
}
}
else if(name.equals("删除"))
{
if(combo.getSelectedIndex() != -1)
{
String del = combo.getSelectedItem().toString();
combo.removeItem(del);
jpanel1.add(jlabel2);
jlabel2.setText(" 删除成功");
}
else
{
jpanel1.add(jlabel2);
jlabel2.setText("请选择要删除的星座");
}
}
}
}
combo.addItemListener(new myItemListener());
jbutton1.addActionListener(new myActionListener());
jbutton2.addActionListener(new myActionListener());
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时操作
jframe.setVisible(true); //设置可见
}
}