Autocompletesuche im LenderModel implementiert.

This commit is contained in:
Servicepoint
2014-11-12 17:25:32 +01:00
parent a50daa53db
commit 36dc37fc66
9 changed files with 231 additions and 38 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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<String, Object> 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<Component> order = new Vector<Component>();
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()));
}
}
}

View File

@@ -99,10 +99,10 @@ public class UserPanel extends JPanel implements ActionListener, KeyListener {
//Traversal-Policy
Vector<Component> order = new Vector<Component>();
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

View File

@@ -17,4 +17,82 @@ public class LenderModel {
public void updateModel(){
data = dbCon.getLenderList();
}
public ArrayList<KLender> 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;
}
}

View File

@@ -34,7 +34,6 @@ public class UserListModel extends AbstractListModel<String> 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;