動的配列で学生名を保存する


この例は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);
			}
		});
	}
}