📄 addressbook.java
字号:
contactTableLayoutManager.getTableLayout().setColumnNames(new String[] { i18n.tr("Name"), i18n.tr("Company"), i18n.tr("Fax"),}); GUIHelper.setMnemonics(getJMenuBar()); } public void valueChanged(ListSelectionEvent e) { updateActions(); } public void updateActions() { boolean selected = (contactTable.getSelectedRow() != -1); editAction.setEnabled(selected); deleteAction.setEnabled(selected); } private static class AddressTableModel extends AbstractTableModel { private static final Class[] columnClasses= { String.class, String.class, String.class, }; private List<SimpleContact> data = new ArrayList<SimpleContact>(); public AddressTableModel() { } public void add(SimpleContact contact) { data.add(contact); fireTableRowsInserted(data.size() - 1, data.size() - 1); } public Class<?> getColumnClass(int column) { return columnClasses[column]; } public int getColumnCount() { return columnClasses.length; } public SimpleContact getContact(int row) { return data.get(row); } public int getRowCount() { return data.size(); } public Object getValueAt(int row, int column) { SimpleContact contact = data.get(row); switch (column) { case 0: return contact.getFirstname() + " " + contact.getLastname(); case 1: return contact.getCompany(); case 2: return contact.getFaxNumber(); default: return null; } } public int indexOf(SimpleContact contact) { for (int i = 0; i < data.size(); i++) { if (data.get(i).getContact().equals(contact.getContact())) { return i; } } return -1; } public void remove(SimpleContact contact) { // XXX work around broken SimpleContant.equals() method int i = indexOf(contact); if (i != -1) { data.remove(i); fireTableRowsDeleted(i, i); } } public void setData(List<SimpleContact> data) { this.data = data; fireTableDataChanged(); } public void update(SimpleContact contact) { // XXX work around broken SimpleContant.equals() method int i = indexOf(contact); if (i != -1) { fireTableRowsUpdated(i, i); } } } private class CloseAction extends AbstractXNapAction { public CloseAction() { } public void actionPerformed(ActionEvent event) { AddressBook.this.setVisible(false); } } private class ContactCollection { private ContactDatabase database; private String filterText; private ContactGroup group; private String name; private ContactCollection parent; private boolean changed; public ContactCollection(ContactCollection parent, ContactGroup group) { this.parent = parent; this.group = group; } public ContactCollection(ContactDatabase database, String name) { this.database = database; this.name = name; } public void add(SimpleContact contact) { getDatabase().getContactCollection().add(contact.getContact()); if (group != null) { group.addContact(contact.getContact()); } if (matches(contact)) { contactTableModel.add(contact); } changed = true; } public void changed(SimpleContact contact) { if (!matches(contact)) { contactTableModel.remove(contact); } else { contactTableModel.update(contact); } changed = true; } public ContactDatabase getDatabase() { return (parent != null) ? parent.getDatabase() : database; } public ContactGroup getGroup() { return group; } public boolean isChanged() { return changed; } private boolean matches(SimpleContact contact) { if (filterText == null || filterText.length() == 0) { return true; } return contact.getFirstname().toLowerCase().contains(filterText) || contact.getLastname().toLowerCase().contains(filterText) || contact.getCompany().toLowerCase().contains(filterText) || contact.getFaxNumber().toLowerCase().contains(filterText); } public void remove(SimpleContact contact) { getDatabase().getContactCollection().remove(contact.getContact()); if (group != null) { group.removeContact(contact.getContact()); } if (matches(contact)) { contactTableModel.remove(contact); } changed = true; } public void resync() { Contact[] contacts = (group != null) ? group.listContacts() : database.getContactCollection().toArray(); List<SimpleContact> data = new ArrayList<SimpleContact>(contacts.length); for (int i = 0; i < contacts.length; i++) { SimpleContact contact = new SimpleContact(contacts[i]); if (matches(contact)) { data.add(contact); } } contactTableModel.setData(data); valueChanged(null); } public void setDatabase(ContactDatabase database) { this.database = database; changed = false; resync(); } public void setFilterText(String filterText) { this.filterText = filterText.toLowerCase(); resync(); } @Override public String toString() { return (group != null) ? group.getName() : name; } } private static class ContactCollectionCellRenderer extends DefaultTreeCellRenderer { Icon bookIcon = IconHelper.getTreeIcon("contents.png"); Icon groupIcon = IconHelper.getTreeIcon("kdmconfig.png"); @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; if (node.getUserObject() instanceof ContactCollection) { ContactCollection collection = (ContactCollection)node.getUserObject(); setIcon((collection.getGroup() != null) ? groupIcon : bookIcon); } return this; } } private class DeleteAction extends AbstractXNapAction { public DeleteAction() { putValue(ICON_FILENAME, "editdelete.png"); } public void actionPerformed(ActionEvent e) { SimpleContact[] contacts = getSelectedContacts(); if (Dialogs.showConfirmDialog(AddressBook.this, i18n.tr("Do you really want to delete the selected contacts?"), i18n.tr("Delete Contacts"), JOptionPane.YES_NO_OPTION, Settings.CONFIRM_DELETE) == JOptionPane.YES_OPTION) { for (int i = 0; i < contacts.length; i++) { getSelectedContactCollection().remove(contacts[i]); } } } } private class EditAction extends AbstractXNapAction { public EditAction() { putValue(ICON_FILENAME, "edit.png"); } public void actionPerformed(ActionEvent e) { SimpleContact[] contact = getSelectedContacts(); EditContactDialog dialog = new EditContactDialog(AddressBook.this, contact[0]); dialog.setModal(true); dialog.setLocationRelativeTo(AddressBook.this); dialog.setVisible(true); if (dialog.isOkay()) { getSelectedContactCollection().changed(contact[0]); } } } private class ExportAction extends AbstractXNapAction { public ExportAction() { putValue(ICON_FILENAME, "fileexport.png"); } public void actionPerformed(ActionEvent event) { if (contactTableModel.getRowCount() == 0) { Dialogs.showInfo(AddressBook.this, i18n.tr("No data to export"), i18n.tr("JHylaFAX Addressbook Error")); } JFileChooser fileChooser = new JFileChooser(); fileChooser.addChoosableFileFilter(new FileExtensionFilter(i18n.tr("vCards (*.vcf)"), ".vcf")); if (fileChooser.showSaveDialog(AddressBook.this) == JFileChooser.APPROVE_OPTION) { try { SimpleContact[] contacts = getSelectedContacts(); if (contacts.length == 0) { contacts = getAlllContacts(); } exportContacts(fileChooser.getSelectedFile(), contacts); Dialogs.showInfo(AddressBook.this, i18n.tr("Exported {0} contacts", contacts.length), i18n.tr("JHylaFAX Address Book")); } catch (Exception e) { ErrorDialog.showError(AddressBook.this, i18n.tr("Could not export to file \"{0}\""), i18n.tr("JHylaFAX Error"), e); } } } } private class FilterAction extends AbstractXNapAction { public FilterAction() { putValue(ICON_FILENAME, "filter.png"); } public void actionPerformed(ActionEvent e) { getSelectedContactCollection().setFilterText(searchTextField.getText()); } } private class ImportAction extends AbstractXNapAction { public ImportAction() { putValue(ICON_FILENAME, "fileimport.png"); }/* public void actionPerformed1(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); fileChooser.addChoosableFileFilter(new FileExtensionFilter(I18n.tr("vCards (*.vcf)"), ".vcf")); if (fileChooser.showOpenDialog(AddressBook.this) == JFileChooser.APPROVE_OPTION) { try { SimpleContact[] contacts = importContacts(fileChooser.getSelectedFile()); Dialogs.showInfo(AddressBook.this, I18n.tr("Imported {0} contacts", contacts.length), I18n.tr("JHylaFAX Address Book")); } catch (Exception e) { ErrorDialog.showError(AddressBook.this, I18n.tr("Could not import from file \"{0}\""), I18n.tr("JHylaFAX Addressbook Error"), e); } } }*/ public void actionPerformed(ActionEvent e) { ImportWizard wizard = new ImportWizard(AddressBook.this); wizard.setLocationRelativeTo(AddressBook.this); wizard.setVisible(true); } } private class NewAction extends AbstractXNapAction { public NewAction() { putValue(ICON_FILENAME, "filenew.png"); } public void actionPerformed(ActionEvent e) { SimpleContact contact = new SimpleContact(); EditContactDialog dialog = new EditContactDialog(AddressBook.this, contact); dialog.setModal(true); dialog.setLocationRelativeTo(AddressBook.this); dialog.setVisible(true); if (dialog.isOkay()) { getSelectedContactCollection().add(contact); } } } private class TableDoubleClickAction extends AbstractXNapAction { public TableDoubleClickAction() { } public void actionPerformed(ActionEvent event) { if (doubleClickAction == null) { if (editAction.isEnabled()) { editAction.actionPerformed(event); } } else if (doubleClickAction.isEnabled()){ doubleClickAction.actionPerformed(event); } } } private class TabTitleButton extends ToolBarButton { public TabTitleButton(Action action) { super(action); String iconName = (String)action.getValue(AbstractXNapAction.ICON_FILENAME); setIcon(IconHelper.getTabTitleIcon(iconName)); setMargin(new Insets(0, 0, 0, 0)); } } private class ContactTransferHandler extends AbstractContactTransferHandler { @Override protected Transferable createTransferable(JComponent c) { SimpleContact[] contacts = getSelectedContacts(); if (contacts.length == 0) { return super.createTransferable(c); } ByteArrayOutputStream out = new ByteArrayOutputStream(); ContactIOFactory factory = Pim.getContactIOFactory(); ContactMarshaller marshaller = factory.createContactMarshaller(); marshaller.setEncoding("UTF-8"); for (SimpleContact contact : contacts) { marshaller.marshallContact(out, contact.getContact()); } return new ContactTransferable(new ByteArrayInputStream(out.toByteArray())); } @Override public void importData(Contact[] contacts) { for (int i = 0; i < contacts.length; i++) { SimpleContact contact = new SimpleContact(contacts[i]); getSelectedContactCollection().add(contact); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -