From 36dc37fc66e3539f4b21d2967ad660fa08d0266a Mon Sep 17 00:00:00 2001 From: Servicepoint Date: Wed, 12 Nov 2014 17:25:32 +0100 Subject: [PATCH] Autocompletesuche im LenderModel implementiert. --- .../converter/LenderNameConverter.java | 15 ++ .../LenderStudentnumberConverter.java | 14 ++ .../converter/LenderSurnameConverter.java | 15 ++ src/de/katho/kBorrow/db/SqliteConnector.java | 4 +- src/de/katho/kBorrow/gui/MainWindow.java | 2 + src/de/katho/kBorrow/gui/NewLendingPanel.java | 132 ++++++++++++++---- src/de/katho/kBorrow/gui/UserPanel.java | 8 +- src/de/katho/kBorrow/models/LenderModel.java | 78 +++++++++++ .../katho/kBorrow/models/UserListModel.java | 1 - 9 files changed, 231 insertions(+), 38 deletions(-) create mode 100644 src/de/katho/kBorrow/converter/LenderNameConverter.java create mode 100644 src/de/katho/kBorrow/converter/LenderStudentnumberConverter.java create mode 100644 src/de/katho/kBorrow/converter/LenderSurnameConverter.java diff --git a/src/de/katho/kBorrow/converter/LenderNameConverter.java b/src/de/katho/kBorrow/converter/LenderNameConverter.java new file mode 100644 index 0000000..bfea559 --- /dev/null +++ b/src/de/katho/kBorrow/converter/LenderNameConverter.java @@ -0,0 +1,15 @@ +package de.katho.kBorrow.converter; + +import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; + +import de.katho.kBorrow.data.KLender; + +public class LenderNameConverter extends ObjectToStringConverter { + + public String getPreferredStringForItem(Object pItem) { + if(pItem == null) return null; + if(pItem instanceof KLender) return ((KLender) pItem).getName(); + return null; + } + +} diff --git a/src/de/katho/kBorrow/converter/LenderStudentnumberConverter.java b/src/de/katho/kBorrow/converter/LenderStudentnumberConverter.java new file mode 100644 index 0000000..3ccb2af --- /dev/null +++ b/src/de/katho/kBorrow/converter/LenderStudentnumberConverter.java @@ -0,0 +1,14 @@ +package de.katho.kBorrow.converter; + +import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; + +import de.katho.kBorrow.data.KLender; + +public class LenderStudentnumberConverter extends ObjectToStringConverter { + + public String getPreferredStringForItem(Object pItem) { + if(pItem == null) return null; + if(pItem instanceof KLender) return String.valueOf(((KLender) pItem).getStudentnumber()); + return null; + } +} diff --git a/src/de/katho/kBorrow/converter/LenderSurnameConverter.java b/src/de/katho/kBorrow/converter/LenderSurnameConverter.java new file mode 100644 index 0000000..e9cc6ea --- /dev/null +++ b/src/de/katho/kBorrow/converter/LenderSurnameConverter.java @@ -0,0 +1,15 @@ +package de.katho.kBorrow.converter; + +import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; + +import de.katho.kBorrow.data.KLender; + +public class LenderSurnameConverter extends ObjectToStringConverter { + + public String getPreferredStringForItem(Object pItem) { + if(pItem == null) return null; + if(pItem instanceof KLender) return ((KLender) pItem).getSurname(); + return null; + } + +} diff --git a/src/de/katho/kBorrow/db/SqliteConnector.java b/src/de/katho/kBorrow/db/SqliteConnector.java index ce71548..35094c3 100644 --- a/src/de/katho/kBorrow/db/SqliteConnector.java +++ b/src/de/katho/kBorrow/db/SqliteConnector.java @@ -248,11 +248,11 @@ public class SqliteConnector implements DbConnector { try{ Statement st = connection.createStatement(); - String query = "SELECT id, name, surname, studentnumber FROM lender"; + String query = "SELECT id, name, surname, student_number FROM lender"; ResultSet rs = st.executeQuery(query); while (rs.next()){ - lendArr.add(new KLender(rs.getInt("id"), rs.getString("name"), rs.getString("surname"), rs.getInt("studentnumber"))); + lendArr.add(new KLender(rs.getInt("id"), rs.getString("name"), rs.getString("surname"), rs.getInt("student_number"))); } return lendArr; diff --git a/src/de/katho/kBorrow/gui/MainWindow.java b/src/de/katho/kBorrow/gui/MainWindow.java index 0bc87c3..1ecf36a 100644 --- a/src/de/katho/kBorrow/gui/MainWindow.java +++ b/src/de/katho/kBorrow/gui/MainWindow.java @@ -17,6 +17,7 @@ import de.katho.kBorrow.db.SqlConnector; import de.katho.kBorrow.db.SqliteConnector; import de.katho.kBorrow.models.ArticleTableModel; import de.katho.kBorrow.models.FreeArticleTableModel; +import de.katho.kBorrow.models.LenderModel; import de.katho.kBorrow.models.UserTableModel; import de.katho.kBorrow.models.UserListModel; @@ -62,6 +63,7 @@ public class MainWindow { models.put("userlistmodel", new UserListModel(dbCon)); models.put("articlemodel", new ArticleTableModel(dbCon)); models.put("freearticlemodel", new FreeArticleTableModel(dbCon)); + models.put("lendermodel", new LenderModel(dbCon)); this.tabbedPane = new JTabbedPane(JTabbedPane.TOP); this.frame.getContentPane().add(this.tabbedPane, BorderLayout.CENTER); diff --git a/src/de/katho/kBorrow/gui/NewLendingPanel.java b/src/de/katho/kBorrow/gui/NewLendingPanel.java index 6352b5b..f1bc27f 100644 --- a/src/de/katho/kBorrow/gui/NewLendingPanel.java +++ b/src/de/katho/kBorrow/gui/NewLendingPanel.java @@ -2,9 +2,14 @@ package de.katho.kBorrow.gui; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusListener; import java.io.IOException; import java.util.Date; import java.util.HashMap; +import java.util.Vector; import javax.swing.JButton; import javax.swing.JComboBox; @@ -18,14 +23,22 @@ import javax.swing.UIManager; import javax.swing.border.TitledBorder; import org.jdesktop.swingx.JXDatePicker; +import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; import de.katho.kBorrow.Util; +import de.katho.kBorrow.converter.LenderNameConverter; +import de.katho.kBorrow.converter.LenderStudentnumberConverter; +import de.katho.kBorrow.converter.LenderSurnameConverter; +import de.katho.kBorrow.data.KLender; import de.katho.kBorrow.db.DbConnector; import de.katho.kBorrow.listener.NewLendingTableButton; import de.katho.kBorrow.models.FreeArticleTableModel; +import de.katho.kBorrow.models.LenderModel; import de.katho.kBorrow.models.UserListModel; -public class NewLendingPanel extends JPanel { +import java.awt.event.FocusEvent; + +public class NewLendingPanel extends JPanel implements ActionListener, FocusListener{ /** * @@ -38,7 +51,11 @@ public class NewLendingPanel extends JPanel { private UserListModel userListModel; private JLabel lblStartDate; private JLabel lblArticleName; - private int articleId = -1; + private int articleId; + private LenderModel lenderModel; + private JButton btnCancel; + private JButton btnSave; + private Object lastFocussedComponent; /** * Create the panel. @@ -47,10 +64,13 @@ public class NewLendingPanel extends JPanel { */ public NewLendingPanel(final DbConnector dbCon, HashMap pModel) throws IOException { setLayout(null); + articleId = -1; + lastFocussedComponent = null; // FreeArticleTable freeArticleTableModel = (FreeArticleTableModel)pModel.get("freearticlemodel"); userListModel = (UserListModel)pModel.get("userlistmodel"); + lenderModel = (LenderModel)pModel.get("lendermodel"); JTable freeArticleTable = new JTable(freeArticleTableModel); freeArticleTable.setRowHeight(30); @@ -121,43 +141,62 @@ public class NewLendingPanel extends JPanel { JSeparator separator = new JSeparator(); separator.setBounds(10, 90, 569, 2); - panelNewLending.add(separator); - JButton btnAbbrechen = new JButton("Abbrechen"); - btnAbbrechen.setBounds(471, 130, 89, 23); - panelNewLending.add(btnAbbrechen); - JButton btnSpeichern = new JButton("Speichern"); - btnSpeichern.setBounds(471, 160, 89, 23); - panelNewLending.add(btnSpeichern); - JLabel lblNewLabel_1 = new JLabel("Name:"); - lblNewLabel_1.setBounds(10, 100, 90, 20); - panelNewLending.add(lblNewLabel_1); - - JLabel lblNewLabel_2 = new JLabel("Nachname:"); - lblNewLabel_2.setBounds(10, 130, 90, 20); - panelNewLending.add(lblNewLabel_2); - - JLabel lblNewLabel_3 = new JLabel("Matrikelnummer:"); - lblNewLabel_3.setBounds(10, 160, 90, 20); - panelNewLending.add(lblNewLabel_3); + // Lender Labels + JLabel lblLenderName = new JLabel("Name:"); + JLabel lblLenderSurname = new JLabel("Nachname:"); + JLabel lblLenderStudentnumber = new JLabel("Matrikelnummer:"); + lblLenderName.setBounds(10, 100, 90, 20); + lblLenderSurname.setBounds(10, 130, 90, 20); + lblLenderStudentnumber.setBounds(10, 160, 90, 20); + // Lender Textfields tfName = new JTextField(); - tfName.setBounds(110, 100, 90, 20); - panelNewLending.add(tfName); - tfName.setColumns(10); - tfSurname = new JTextField(); - tfSurname.setBounds(110, 130, 90, 20); - panelNewLending.add(tfSurname); - tfSurname.setColumns(10); - tfStudentNumber = new JTextField(); - tfStudentNumber.setBounds(110, 160, 90, 20); - panelNewLending.add(tfStudentNumber); + tfName.addFocusListener(this); + tfSurname.addFocusListener(this); + tfStudentNumber.addFocusListener(this); + tfName.setColumns(10); + tfSurname.setColumns(10); tfStudentNumber.setColumns(10); - + tfName.setBounds(110, 100, 90, 20); + tfSurname.setBounds(110, 130, 90, 20); + tfStudentNumber.setBounds(110, 160, 90, 20); + AutoCompleteDecorator.decorate(tfName, lenderModel.getList(), false, new LenderNameConverter() ); + AutoCompleteDecorator.decorate(tfSurname, lenderModel.getList(), false, new LenderSurnameConverter()); + AutoCompleteDecorator.decorate(tfStudentNumber, lenderModel.getList(), false, new LenderStudentnumberConverter()); + + // Buttons + btnCancel = new JButton("Abbrechen"); + btnSave = new JButton("Speichern"); + btnCancel.setBounds(471, 130, 89, 23); + btnSave.setBounds(471, 160, 89, 23); + btnCancel.addActionListener(this); + + // Tab Traversal Policy + Vector order = new Vector(); + order.add(tfName); + order.add(tfSurname); + order.add(tfStudentNumber); + order.add(btnCancel); + order.add(btnSave); + MyFocusTraversalPolicy focusPolicy = new MyFocusTraversalPolicy(order); + + // New Lending Pane + panelNewLending.add(lblLenderStudentnumber); + panelNewLending.add(lblLenderSurname); + panelNewLending.add(lblLenderName); + panelNewLending.add(separator); + panelNewLending.add(btnSave); + panelNewLending.add(btnCancel); + panelNewLending.add(tfName); + panelNewLending.add(tfSurname); + panelNewLending.add(tfStudentNumber); + panelNewLending.setFocusTraversalPolicy(focusPolicy); + panelNewLending.setFocusCycleRoot(true); } public void setModeNewLending(int pArticleId, String articleName) { @@ -167,4 +206,35 @@ public class NewLendingPanel extends JPanel { articleId = pArticleId; } + + public void actionPerformed(ActionEvent pEvent) { + if(pEvent.getSource() == btnCancel){ + lblStartDate.setText(""); + lblArticleName.setText(""); + articleId = -1; + tfName.setText(""); + tfSurname.setText(""); + tfStudentNumber.setText(""); + } + + } + + @Override + public void focusGained(FocusEvent pEvent) { + if(pEvent.getSource() == tfName) System.out.println("tfName got focus"); + if(pEvent.getSource() == tfSurname) System.out.println("tfSurname got focus"); + if(pEvent.getSource() == tfStudentNumber) System.out.println("tfStudentNumber got focus"); + + + } + + public void focusLost(FocusEvent pEvent) { + KLender result = lenderModel.getLender(tfName.getText(), tfSurname.getText(), tfStudentNumber.getText()); + + if(result != null){ + tfName.setText(result.getName()); + tfSurname.setText(result.getSurname()); + tfStudentNumber.setText(String.valueOf(result.getStudentnumber())); + } + } } diff --git a/src/de/katho/kBorrow/gui/UserPanel.java b/src/de/katho/kBorrow/gui/UserPanel.java index c4b34fb..5846785 100644 --- a/src/de/katho/kBorrow/gui/UserPanel.java +++ b/src/de/katho/kBorrow/gui/UserPanel.java @@ -99,10 +99,10 @@ public class UserPanel extends JPanel implements ActionListener, KeyListener { //Traversal-Policy Vector order = new Vector(); - order.add(this.textFieldUserName); - order.add(this.textFieldUserSurname); - order.add(this.btnUserCancel); - order.add(this.btnUserSave); + order.add(textFieldUserName); + order.add(textFieldUserSurname); + order.add(btnUserCancel); + order.add(btnUserSave); MyFocusTraversalPolicy focusPolicy = new MyFocusTraversalPolicy(order); // User-Edit-Pane diff --git a/src/de/katho/kBorrow/models/LenderModel.java b/src/de/katho/kBorrow/models/LenderModel.java index 3d9ca0b..8b07b8b 100644 --- a/src/de/katho/kBorrow/models/LenderModel.java +++ b/src/de/katho/kBorrow/models/LenderModel.java @@ -17,4 +17,82 @@ public class LenderModel { public void updateModel(){ data = dbCon.getLenderList(); } + + public ArrayList getList(){ + return data; + } + + public KLender getLender(String pName, String pSurname, String pSN){ + boolean nameEmpty = pName.isEmpty(); + boolean surnameEmpty = pSurname.isEmpty(); + boolean snEmpty = pSN.isEmpty(); + int sn; + if(pSN.matches("[0-9]+")){ + sn = Integer.parseInt(pSN); + } + else { + sn = -1; + } + + if(!nameEmpty){ + if(!surnameEmpty){ + if(!snEmpty){ + // Alles gegeben + for(KLender e : data){ + if(e.getName().equals(pName) && e.getSurname().equals(pSurname) && e.getStudentnumber() == sn){ + return e; + } + } + } + //Name und Surname gegeben + for(KLender e : data){ + if(e.getName().equals(pName) && e.getSurname().equals(pSurname)){ + return e; + } + } + } + if(!snEmpty){ + // Name und SN gegeben + for (KLender e : data){ + if(e.getName().equals(pName) && e.getStudentnumber() == sn){ + return e; + } + } + } + // Nur Name gegeben + for (KLender e : data){ + if(e.getName().equals(pName)){ + return e; + } + } + } + + if(!surnameEmpty){ + if(!snEmpty){ + // Surname und SN gegeben + for (KLender e : data){ + if(e.getSurname().equals(pSurname) && e.getStudentnumber() == sn){ + return e; + } + } + } + // Nur Surname gegeben + for (KLender e : data){ + if(e.getSurname().equals(pSurname)){ + return e; + } + } + } + + if(!snEmpty){ + // Nur SN gegeben + for (KLender e : data){ + if(e.getStudentnumber() == sn){ + return e; + } + } + } + + return null; + } } diff --git a/src/de/katho/kBorrow/models/UserListModel.java b/src/de/katho/kBorrow/models/UserListModel.java index a302a92..fb197f6 100644 --- a/src/de/katho/kBorrow/models/UserListModel.java +++ b/src/de/katho/kBorrow/models/UserListModel.java @@ -34,7 +34,6 @@ public class UserListModel extends AbstractListModel implements ComboBox } public void setSelectedItem(Object object) { - System.out.println(object); if(selectedItem == null && object == null) return; if(selectedItem != null && selectedItem.equals(object)) return; if(object!= null && !dataContains((String)object)) return;