📄 addressbookpanel.java
字号:
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 + -