⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addressbookpanel.java

📁 java图形化界面编程 功能和记事本通讯录相似 记录通讯人的姓名和联系方法等信息并提供查询
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package elegate.cn.edu.nju;

import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import java.util.regex.*;
import java.awt.*;

/**
 * a penel to lay the table  and some buttons or textfield
 * @author Elegate,elegate@gmail.com
 * @author cs department of NJU
 */
public class AddressBookPanel extends JPanel 
{
	private static final long serialVersionUID = 1L;
	
	private JComboBox comboViewMode;
	private JTextField txtSearch;
	private JCheckBox useRegExp;
	private JComboBox comboSearchMode;
	private JComboBox comboSortMode;
	private JTable table;
	private JButton btnModify;
	private JButton btnDeleteFromGroup;
	private JButton btnDeleteForever;
	private JButton btnMoveToGroup;
	private JCheckBox checkBoxDeleteSimultaneously;
	private JComboBox comboGroups;
	private SortFilterTableModel tableModel;
	private AddressBookModel addressBookModel;
	private LinkedList<AddressEntry> searchResult = 
		new LinkedList<AddressEntry>();
	
	private TableColumn[] hiddenColumns;
	
	private final static int IdColumn=12;
	
	/**
	 * @param addressBookModel
	 */
	public AddressBookPanel(AddressBookModel addressBookModel)
	{
		this.addressBookModel=addressBookModel;
		Collection<GroupEntry> allGroups=this.addressBookModel.getAllGroupEntries();
		String[] columns={"Selected","Name","Nickname","Sex"
				,"MobilePhone","HomeTelephone","OfficeTelephone"
				,"Birthday","Email","Icon","Profession","City","ID"
		};
		
		tableModel=new SortFilterTableModel(columns,0);
		
		Collection<AddressEntry> allMembers=
			this.addressBookModel.getAllAddressEntries();
		
	
		for(AddressEntry ele:allMembers)
			tableModel.addRow(ele.toArray());

		
		JLabel lblView=new JLabel("View:");
		lblView.setDisplayedMnemonic('V');
		comboViewMode=new JComboBox(allGroups.toArray());
		comboViewMode.addItem("Search");
		comboViewMode.setSelectedIndex(0);
		comboViewMode.setToolTipText("Choose what you want to view");
		comboViewMode.addActionListener(new ComboViewModeL());
		lblView.setLabelFor(comboViewMode);
		
		JLabel lblSearch=new JLabel("Search:");
		lblSearch.setDisplayedMnemonic('S');

		
		txtSearch=new JTextField(10);
		txtSearch.setToolTipText("Press enter to start search");
		txtSearch.addActionListener(new SearchL());
		lblSearch.setLabelFor(txtSearch);
		
		useRegExp=new JCheckBox("Use regular expression",false);
		useRegExp.setMnemonic('R');;
		useRegExp.setToolTipText("Click to use regular expression when searching");
		
		String[] searchModes={"By name","By email","By mobile phone"
				,"By nickname","By city","By profession"};
		comboSearchMode=new JComboBox(searchModes);
		comboSearchMode.setToolTipText("Select the search standard");
		
		String[] sortMode={"Name","Nickname","Birthday","City"
				,"Profession","Email"};
		JLabel lblSortMode=new JLabel("Sort by:");
		lblSortMode.setDisplayedMnemonic('T');
		comboSortMode=new JComboBox(sortMode);
		comboSortMode.setToolTipText("Select the sort standard");
		comboSortMode.addActionListener(new ComBoSortModeL());
		lblSortMode.setLabelFor(comboSortMode);
		
		table=new JTable(tableModel);
		table.setRowHeight(34);
		table.setToolTipText("Double click the column to sort");
		table.getTableHeader().addMouseListener(new TableHeaderMouseL());
		
		hiddenColumns=new TableColumn[3];
		TableColumnModel columnModel=table.getColumnModel();
		hiddenColumns[0]=columnModel.getColumn(columnModel.getColumnIndex("ID"));
		hiddenColumns[1]=columnModel.getColumn(columnModel.getColumnIndex("HomeTelephone"));
		hiddenColumns[2]=columnModel.getColumn(columnModel.getColumnIndex("OfficeTelephone"));
		hideColumns();
		
		btnModify=new JButton("Modify");
		btnModify.setMnemonic('O');
		btnModify.setToolTipText("Modify the selected address entry");
		btnModify.addActionListener(new BtnModifyL());
		
		btnDeleteFromGroup=new JButton("Delete from group");
		btnDeleteFromGroup.setMnemonic('D');
		btnDeleteFromGroup.setEnabled(false);
		btnDeleteFromGroup.addActionListener(new BtnDeleteFromGroupL());
		btnDeleteFromGroup.setToolTipText("Delete the selected member(s) from this group");
		
		
		btnDeleteForever=new JButton("Delete forever");
		btnDeleteForever.setMnemonic('E');
		btnDeleteForever.setToolTipText("Delete the selected member(s) forever");
		btnDeleteForever.addActionListener(new BtnDeleteForeverL());
		
		btnMoveToGroup=new JButton("MoveTo");
		btnMoveToGroup.setMnemonic('M');
		btnMoveToGroup.setToolTipText("Move to the desired group");
		btnMoveToGroup.addActionListener(new BtnMoveToGroupL());
		
		checkBoxDeleteSimultaneously = new JCheckBox("And delete from this group",false);
		checkBoxDeleteSimultaneously.setMnemonic('A');
		checkBoxDeleteSimultaneously.setToolTipText("Click to delete group members when moving");
		comboGroups=new JComboBox(allGroups.toArray());
		comboGroups.setToolTipText("Select your desired group");
		
		GridBagLayout gbLayout = new GridBagLayout();
		GridBagConstraints gbCon = new GridBagConstraints();
		this.setLayout(gbLayout);
		JPanel searchPanel=new JPanel();
		searchPanel.add(lblSearch);
		searchPanel.add(txtSearch);
		searchPanel.add(comboSearchMode);
		searchPanel.add(useRegExp);
		
		this.addComponent(searchPanel,0,0,4,1,gbCon);
		JPanel viewPanel=new JPanel();
		viewPanel.add(lblView);
		viewPanel.add(comboViewMode);
		this.addComponent(viewPanel,0,1,1,1,gbCon);
		
		JPanel sortPanel=new JPanel();
		sortPanel.add(lblSortMode);
		sortPanel.add(comboSortMode);
		this.addComponent(sortPanel,1,1,2,1,gbCon);
			
		gbCon.weightx=100;
		gbCon.weighty=100;
		gbCon.fill=GridBagConstraints.BOTH;
		this.addComponent(new JScrollPane(table),0,2,5,4,gbCon);
		JPanel btnPanel=new JPanel();
		btnPanel.add(btnModify);
		btnPanel.add(btnDeleteFromGroup);
		btnPanel.add(btnDeleteForever);
		btnPanel.add(btnMoveToGroup);
		btnPanel.add(comboGroups);
		btnPanel.add(checkBoxDeleteSimultaneously);
		this.addComponent(btnPanel,0,6,5,1,gbCon);
		updateView();
	}
	
	private void addComponent(Component c,int gridx,int gridy
			,int gridwidth,int gridheight,GridBagConstraints gbCon)
	{
	    gbCon.gridx=gridx;
	    gbCon.gridy=gridy;
	    gbCon.gridheight=gridheight;
	    gbCon.gridwidth=gridwidth;
	    this.add(c,gbCon);
	}
	
	protected void hideColumns()
	{
		for(int i=0;i<hiddenColumns.length;i++)
			table.removeColumn(hiddenColumns[i]);
	}
	protected void showAllColumns()
	{
		for(int i=0;i<hiddenColumns.length;i++)
			table.addColumn(hiddenColumns[i]);
	}
	
	protected void selectAllEntries()
	{
		int rowCount=tableModel.getRowCount();
		int tableColumn=table.getColumnModel().getColumnIndex("Selected");
		int column=table.convertColumnIndexToModel(tableColumn);
		for(int i=0;i<rowCount;i++)
			this.tableModel.setValueAt(Boolean.TRUE,i,column);
	}
	
	protected void deselectAllEntries()
	{
		int tableColumn=table.getColumnModel().getColumnIndex("Selected");
		int column=table.convertColumnIndexToModel(tableColumn);
		int rowCount=tableModel.getRowCount();
		for(int i=0;i<rowCount;i++)
			this.tableModel.setValueAt(Boolean.FALSE,i,column);
	}
	
	protected void updateView()
	{
		DefaultComboBoxModel groupsModel=(DefaultComboBoxModel)(comboGroups.getModel());
		groupsModel.removeAllElements();
		DefaultComboBoxModel viewModel=(DefaultComboBoxModel)(comboViewMode.getModel());
		String originalSelected=viewModel.getSelectedItem().toString();
		viewModel.removeAllElements();
		Collection<GroupEntry> allGroups=this.addressBookModel.getAllGroupEntries();
		for(GroupEntry ele:allGroups)
		{
			groupsModel.addElement(ele);
			viewModel.addElement(ele);
		}
		viewModel.addElement("Search");
		if(viewModel.getIndexOf
				(addressBookModel.getGroupEntry
				(originalSelected))>=0)
			viewModel.setSelectedItem(originalSelected);
		else
			comboViewMode.setSelectedIndex(0);
		Collection<AddressEntry> allMembers ;
		if(viewModel.getSelectedItem().toString().equals("Search"))
			allMembers=this.searchResult;
		else
			allMembers=this.addressBookModel.getGroupMembers(viewModel.getSelectedItem().toString());
		this.tableModel.setRowCount(0);
		for(AddressEntry ele:allMembers)
		{
			this.tableModel.addRow(ele.toArray());
		}
	}
	
	private void doNormalSearch()
	{
		String searchMode=comboSearchMode.getSelectedItem().toString();
		String key=txtSearch.getText().trim();
		Collection<AddressEntry> c = 
			addressBookModel.getAllAddressEntries();
		searchResult.clear();
		for(AddressEntry ele:c)
		{
			if(searchMode.equalsIgnoreCase("By name"))
			{
				if(key.equals(ele.getName()))
					searchResult.add(ele);
			}
			else if(searchMode.equalsIgnoreCase("By nickname"))
			{
				if(key.equals(ele.getNickname()))
					searchResult.add(ele);
			}
			else if(searchMode.equalsIgnoreCase("By email"))
			{
				if(key.equals(ele.getEmail()))
					searchResult.add(ele);
			}
			else if(searchMode.equalsIgnoreCase("By profession"))
			{
				if(key.equals(ele.getProfession()))
					searchResult.add(ele);
			}
			else if(searchMode.equalsIgnoreCase("By city"))
			{
				if(key.equals(ele.getCity()))
					searchResult.add(ele);
			}
			else if(searchMode.equalsIgnoreCase("By mobile phone"))
			{
				if(key.equals(ele.getMobilePhone()))
					searchResult.add(ele);
			}
		}
		showSearchResult();
	}
	
	private void doSearchUseRegularExpression()
	{
		String searchMode=comboSearchMode.getSelectedItem().toString();
		String key=txtSearch.getText().trim();
		Pattern pattern;
		
		try
		{
			pattern=Pattern.compile(key);
		}
		catch(PatternSyntaxException ex)
		{
			JOptionPane.showMessageDialog(this
					,ex.toString(),"Warning"
					,JOptionPane.ERROR_MESSAGE);
			return;
		}
		Collection<AddressEntry> c = 
			addressBookModel.getAllAddressEntries();
		searchResult.clear();
		for(AddressEntry ele:c)
		{
			if(searchMode.equals("By name"))
			{
				if(pattern.matcher(ele.getName()).matches())
					searchResult.add(ele);
			}
			else if(searchMode.equals("By nickname"))
			{
				if(pattern.matcher(ele.getNickname()).matches())
					searchResult.add(ele);
			}
			else if(searchMode.equals("By email"))
			{
				if(pattern.matcher(ele.getEmail()).matches())
					searchResult.add(ele);
			}
			else if(searchMode.equals("By profession"))
			{
				if(pattern.matcher(ele.getProfession()).matches())
					searchResult.add(ele);
			}
			else if(searchMode.equals("By city"))
			{
				if(pattern.matcher(ele.getCity()).matches())
					searchResult.add(ele);
			}
			else if(searchMode.equals("By mobile phone"))
			{
				if(pattern.matcher(ele.getMobilePhone()).matches())
					searchResult.add(ele);
			}
		}
		showSearchResult();
	}
	private void showSearchResult()
	{
		this.comboViewMode.setSelectedItem("Search");
		this.tableModel.setRowCount(0);
		for(AddressEntry ele:this.searchResult)
		{
			this.tableModel.addRow(ele.toArray());
		}
	}
	
	class SearchL implements ActionListener
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -