版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/86542456
需要实现什么功能?
综合文本框、按钮和下拉列表组件,实现一个星座选择器程序。程序允许用户在下拉列表中选择一个自己的星座,如果不在列表中还可以增加星座,也可以删除星座。
package cn.com.plane;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Choice {
/*author:命运的信徒
* date:2019/1/18
* arm:综合文本框和下拉列表和按钮,做一个星座选择器
*/
static JLabel jl=new JLabel();
static JLabel jll=new JLabel();
static JList<Object> jlist;
static Object [] listData;
static JTextField jtf;
private static void setPage(){
//1.设置窗体的标题和大小
JFrame jf=new JFrame("星座选择器");
jf.setPreferredSize(new Dimension(500, 500));
//2.设置关闭窗体就是关闭程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置布局模式
GridLayout glo=new GridLayout(4,1);
jf.setLayout(glo);
//主要的程序
JPanel jp=new JPanel();
jf.add(jp);
//1.下拉列表
jlist=new JList<Object>();
jlist.setPreferredSize(new Dimension(100, 500));
listData=new Object[]{"白羊座","处女座","双鱼座","双子座","射手座","金牛座","天蝎座","摩羯座","巨蟹座"};
jlist.setListData(listData);
//为下拉列表添加监听事件
jlist.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
//在一个文本框里面显示你的星座
jl.setText("你的星座是:"+jlist.getSelectedValue());
}
});
//十二星座选择器
JLabel jls=new JLabel("十二星座选择器");
//设置这个标签的大小
jls.setPreferredSize(new Dimension(180, 30));
//面板添加标签
jp.add(jls);
//设置字体
jp.setFont(new Font("楷体", Font.BOLD, 24));
jp.add(jlist);
//面板2
JPanel jp1=new JPanel();
jf.add(jp1);
jl.setPreferredSize(new Dimension(200,50));
jp1.add(jl);
//面板3、添加星座
JPanel jp2=new JPanel();
jf.add(jp2);
//说明
JLabel jl1=new JLabel("添加星座-");
jp2.add(jl1);
//输入框
jtf=new JTextField();
jtf.setColumns(5);
jp2.add(jtf);
jp2.add(jll);
//焦点监视事件
jtf.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
jll.setText("输入完成/还没有输入....");
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
jll.setText("正在输入星座.....");
}
});
//面板4,添加按钮以及按钮事件
JPanel jp3=new JPanel();
jf.add(jp3);
JButton jb=new JButton("添加");
jp3.add(jb);
JButton jb1=new JButton("删除");
jp3.add(jb1);
//添加操作
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//添加操作
//1.获取数组的长度
int len=listData.length;
//2.定义一个新的数组,在原有的数组的基础上+1
Object [] data=new Object[len+1];
for (int i = 0; i < listData.length; i++) {
data[i]=listData[i];
}
//把文本框里面输入的值作为最后一位
data[len]=jtf.getText();
//然后更新JList的内容
jlist.setListData(data);
listData=data;
}
});
//删除操作
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//1.选择删除的
//1.获取数组的长度
int len=listData.length;
//2.定义一个新的数组,在原有的数组的基础上+1
Object [] data=new Object[len-1];
int j=0;
for (int i = 0; i < len-1; i++) {
if(listData[i]==jlist.getSelectedValue()){
//把这个标识出来
j=1;
}
if(j==0){
data[i]=listData[i];
}else{
//if j==1的话,就进行替换
data[i]=listData[i+1];
}
}
//然后更新JList的内容
jlist.setListData(data);
listData=data;
}
});
//3.设置可见
jf.pack();
jf.setVisible(true);
}
public static void main(String[] args) {
setPage();
}
}
效果如下
点击列表框的值的时候
新添加一个星座
输入框自带焦点事件、添加成功
’
删除星座