用动态数组保存学生姓名

这个实例是JAVA 从入门到精通(实例版)10.3.5 范例4 的原问题。

创建一个窗体类,输入学生姓名,并可以实现添加姓名和删除姓名。


代码如下:


package tenthChapter;


import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DynamicArray extends JFrame {
	
	
	private static final long serialVersionUID = 1L;
	
	private JTextField textField;     //输入姓名的文本框
	private List arraylist = new ArrayList();//存储输入姓名的集合
	private JList list;
 	
	public static void main(String[] args){
		EventQueue.invokeLater(new Runnable(){
			public void run(){
				try{
					UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
					DynamicArray dynamicArray = new DynamicArray();//创建一个新类
					dynamicArray.setVisible(true);
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		});
	}

	public DynamicArray(){// 构造函数
		
		getContentPane().setLayout(null);
		setBounds(100,100,520,380);    //边界大小
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("用动态数组保存学生姓名");   //窗体框名
		
		final BackgroundPanel backgroundPanel = new BackgroundPanel();  //背景组件
		backgroundPanel.setBounds(0, 0, 510, 380);   //设置边界
		getContentPane().add(backgroundPanel);  //将背景组件加入到总组件
		
		
		JScrollPane scrollPane = new JScrollPane();  //设置一个滚动框组件
		backgroundPanel.add(scrollPane,BorderLayout.CENTER);  
		scrollPane.setBounds(10, 10, 300, 280);  //设置大小
		
		list = new JList();   //创建一个列表控件
		scrollPane.setViewportView(list);//创建一个视口(如果有必要)并设置其视图。这一句我查了资料,并没有弄得很明白
		
		final JPanel panel = new JPanel();
		scrollPane.setColumnHeaderView(panel);
		
		
		final JLabel label = new JLabel("学生姓名:");
		panel.add(label);
		
		textField  = new JTextField();
		textField.setColumns(10);
		panel.add(textField);
		
		final JButton button1 = new JButton();
		button1.setBounds(350, 30, 100, 30);
		button1.setText("添加学生");
		button1.addActionListener(new ActionListener(){//添加事件监听
			public void actionPerformed(ActionEvent e){
				do_button1_actionPerformed(e);//调用该方法
			}
		});
		backgroundPanel.add(button1);
		
		final JButton button2 = new JButton();
		button2.setBounds(350, 100, 100, 30);
		backgroundPanel.add(button2);
		button2.setText("删除学生");
		button2.addActionListener(new ActionListener(){//添加事件监听
			public void actionPerformed(ActionEvent e){
				do_button2_actionPerformed(e);
			}
		});
	}
	
	
	protected void do_button1_actionPerformed(ActionEvent e){  //点击添加学生按钮函数
		textField.requestFocusInWindow(); //获得创建新窗体的焦点,焦点设为姓名输入框
		textField.selectAll();  //选择文本框,准备下次输入
		String text = textField.getText();//获得文本框输入的内容
		if(text.isEmpty()){
			return;
		}
		
		arraylist.add(text);  //将内容加到数组集合
		repalceModel();   //把数组集合的内容显示到界面列表控件中
	}
	
	protected void do_button2_actionPerformed(ActionEvent e){
		Object value = list.getSelectedValue(); //获取列表控件的选择项
		arraylist.remove(value); //从数组集合中删除该选择项
		repalceModel(); //把数组集合的内容显示到界面列表控件中
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void repalceModel(){
		//为列表控件设置数据模型显示数组集合中的数据
		list.setModel(new AbstractListModel(){
			
			private static final long serialVersionUID = -3406879889366471211L;
			@Override
			public int getSize(){//获取数组大小
				return arraylist.size();
			}
			@Override
			public Object getElementAt(int index){//获取指定索引元素
				return arraylist.get(index);
			}
		});
	}
}


你可能感兴趣的:(java,java从入门到精通实例版,java)