1. 程式人生 > >Java例項——動態陣列的使用

Java例項——動態陣列的使用

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;

public class DynamicArray extends JFrame{
	private JPanel contentPane;
	private final JPanel panel = new JPanel();

	//launch the application
	public static void main(String[] args){
		try{
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		}catch(Throwable e){
			e.printStackTrace();
		}
		EventQueue.invokeLater(new Runnable(){
			public void run(){
				try{
					DynamicArray frame = new DynamicArray();
					frame.setVisible(true);
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		});
	}

	//create the frame
	public DynamicArray(){
		setTitle("使用動態陣列來儲存水果名");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100,100,337,269);  //從(100,100)出現,大小為(337,269);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5,5,5,5));
		contentPane.setLayout(new BorderLayout(0,0));  //採用邊框佈局
		setContentPane(contentPane);

		JScrollPane scrollPane = new JScrollPane();
		contentPane.add(scrollPane,BorderLayout.CENTER);

		list = new JList();
		scrollPane.setViewportView(list);

		JPanel panel_1 = new JPanel();
		scrollPane.setColumnHeaderView(panel_1);

		JLabel label = new JLabel("水果");
		panel_1.add(label);

		textField = new JTextField();
		panel_1.add(textField);
		textField.setColumns(10);
		panel.setPreferredSize(new Dimension(100,10));
		contentPane.add(panel,BorderLayout.EAST);
		panel.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));

		JButton button = new JButton("增加水果");
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				do_button_actionPerformed(e);
			}
		});
		panel.add(button);


		JButton button_1 = new JButton("刪除水果");
		button_1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				do_button_1_actionPerformed(e);
			}
		});
		panel.add(button_1);
	}

	private ArrayList<String> arrayList = new ArrayList<String>();
	private JTextField textField;
	private JList list;

	protected void do_button_actionPerformed(ActionEvent e){
		textField.requestFocusInWindow();
		textField.selectAll();
		String text = textField.getText();
		if(text.isEmpty())
			return;
		arrayList.add(text);
		replaceModel();  //把陣列集合中的內容顯示到介面列表控制元件中
	}

	protected void do_button_1_actionPerformed(ActionEvent e){
		Object value = list.getSelectedValue();
		arrayList.remove(value);
		replaceModel(); //把陣列集合中內容顯示到介面列表控制元件中
	}

	private void replaceModel(){
		list.setModel(new AbstractListModel(){
			@Override
			public int getSize(){
				return arrayList.size();
			}

			@Override
			public Object getElementAt(int index){
				return arrayList.get(index);
			}
		});
	}
}