Hallo,
ich schreibe gerade an einem Programm, womit Artikel verwaltet werde können.
Ich diese Artikel haben Haupt und Unterkategorien. Beim Start des Programms werden alle Artikel aus der Datenbank in den Cache geladen. Wenn ich eine Haupt und Unterkategorie auswähle, dann werden mir auch nur die Artikel angezeigt, die dort vorhanden sind. Wenn ich dann wieder "Alle" auswähle, werden mir wieder alle angezeigt. Das passiert über ComboBoxen.
Wollte mich bei euch erkundigen, ob es eine saubere Programmierung ist, wie ich es gemacht habe.. Oder ob ich dort noch was verbessern muss...
Wenn ich eine Haupt und Unterkategorie auswähle, werden die Listen gefiltert und eine neue Liste wird an die Methode setListOfArticle(ArrayList) im TableModel weitergegeben und die aktuelle Tabelle wird gecleart und die neue Liste wird eingefügt und die Methode wird mit der fireTableDataChanged() aktualisiert.
DIe komplette Liste mit den Artikeln wird in der Klasse ArticleManagement gespeichert und bei Bedarf wieder neu eingebunden.
Ich zeige euch mal die Klassen und freue mich über eure Kommentare..
JScrollPane mit JTable
GUI
ich schreibe gerade an einem Programm, womit Artikel verwaltet werde können.
Ich diese Artikel haben Haupt und Unterkategorien. Beim Start des Programms werden alle Artikel aus der Datenbank in den Cache geladen. Wenn ich eine Haupt und Unterkategorie auswähle, dann werden mir auch nur die Artikel angezeigt, die dort vorhanden sind. Wenn ich dann wieder "Alle" auswähle, werden mir wieder alle angezeigt. Das passiert über ComboBoxen.
Wollte mich bei euch erkundigen, ob es eine saubere Programmierung ist, wie ich es gemacht habe.. Oder ob ich dort noch was verbessern muss...
Wenn ich eine Haupt und Unterkategorie auswähle, werden die Listen gefiltert und eine neue Liste wird an die Methode setListOfArticle(ArrayList) im TableModel weitergegeben und die aktuelle Tabelle wird gecleart und die neue Liste wird eingefügt und die Methode wird mit der fireTableDataChanged() aktualisiert.
DIe komplette Liste mit den Artikeln wird in der Klasse ArticleManagement gespeichert und bei Bedarf wieder neu eingebunden.
Ich zeige euch mal die Klassen und freue mich über eure Kommentare..
Java:
public class ArticleTableModel extends AbstractTableModel {
private String[] columnNames = new String[]{"Bezeichung", "SKU"};
private ArrayList<Article> listOfArticles = new ArrayList<Article>();
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return listOfArticles.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Article article = listOfArticles.get(rowIndex);
switch(columnIndex){
case 0: return article.getDescription();
case 1: return article.getArtnr();
}
return "Fehler";
}
public Article getValueAt(int rowIndex) {
return listOfArticles.get(rowIndex);
}
public String getColumnName(int iColumn){
return columnNames[iColumn];
}
public ArrayList<Article> getListOfArticles() {
return listOfArticles;
}
public void setListOfArticles(ArrayList<Article> listOfArticles) {
this.listOfArticles.clear();
this.listOfArticles.addAll(listOfArticles);
this.fireTableDataChanged();
}
JScrollPane mit JTable
Java:
private JTable showArticleTable(){
// TableModel
// tblModel = new ArticleTableModel();
tblModel.setListOfArticles(ArticleManagement.getInstance().getArticleList());
Java:
public class ArticleManagement extends Observable {
//Attribute
private ArrayList<Article> listOfArticles;
private static ArticleManagement articleManagement = null;
private DatabaseArticle dbArt = DatabaseFatory.getInstance().createDatabaseArticle();
private Article selectedArticleInView = null;
private ArrayList<Article> filteredListOfArticles = null;
private SVVLogger logger = SVVLogger.getInstance();
/**
* Methode erstellt einen neuen Artikel.
* Es wird überprüft, ob dieser Artikel
* schon im Cache vorhanden ist oder nicht.
*
* @param article Artikel der hinzugefügt werden soll
*/
public void create(Article article){
String iUniqueKey = article.getUniqueKey();
if(listOfArticles.contains(iUniqueKey)){
JOptionPane.showConfirmDialog(null, "Der Artikel mit der Artikelnummer \n" + article.getArtnr() + "\n ist schon in der Datenbank vorhanden.\n \nSoll dieser nun angezeigt werden?" , "Artikle schon vorhanden", JOptionPane.YES_NO_OPTION);
}else {
listOfArticles.add(article);
dbArt.create(article);
logger.log(Level.INFO, ArticleManagement.class, "Artikel " + article.getDescription() + " wurde hinzugefügt.");
}
}
/**
* Es werden alle Artikel aus
* der Datenbank gelesen und eine
* ArrayList<Article> geschrieben
*/
public void readAllFromDatabase(){
listOfArticles = (ArrayList<Article>) dbArt.selectAll();
}
/**
* Gibt eine ArrayList<Article> mit Artikeln zurück,
* die in der übergebenen Unterkategorie sind.
*
* @param subCat Unterkategorie
* @return ArrayList<Article>
*/
public ArrayList<Article> getArticleList(SubCategory subCat) {
if(subCat.getDescription() == "Alle")
return listOfArticles;
else
return getFilteredListOfArticles(subCat);
}
/**
* Methode liefert die Artikel-Objekte zurück,
* die sich in der selektierten Unterkategorie
* befinden
*
* @param selectedSubCat selektierte Unterkategorie
* @return ArrayList<Article> befinden sich
* in der Unterkategorie
*/
public ArrayList<Article> getFilteredListOfArticles(SubCategory selectedSubCat) {
if(filteredListOfArticles == null)
filteredListOfArticles = new ArrayList<Article>();
else
filteredListOfArticles.clear();
for(Article article : listOfArticles){
if(article.getSubCat() == selectedSubCat.getId())
filteredListOfArticles.add(article);
}
return filteredListOfArticles;
}
Java:
public class Breadcrumb extends JPanel{
private JComboBox cbMainCatList;
private JComboBox cbSubCatList;
private JComboBox cbApplGrpList;
private ArticleTableModel model;
private Vector<String> vSubCats = new Vector<String>();
public Breadcrumb(ArticleTableModel model){
this.model = model;
initalize();
}
/**
* Klasse reagiert auf die Auswahl des Users
* in der ComboBox der Unterkategorien
*
* @author
*
*/
class ItemListenerForSubCatBox implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
SubCategory subCat = null;
ArrayList<Article> listOfArticles = null;
if(cbSubCatList.getSelectedItem() != null){
subCat = (SubCategory) cbSubCatList.getSelectedItem();
SubCatManagement.getInstance().setSelectedSubCatInBreadcrumb(subCat);
listOfArticles = ArticleManagement.getInstance().getArticleList(subCat);
model.setListOfArticles(listOfArticles);
}
}
}
}
GUI
Java:
/**
* Zum Speichern von neuen Artikeln
*
* @author
*
*/
class SaveListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
ArticleManagement.getInstance().create(artAtt.getNewArticle());
tblModel.setListOfArticles(ArticleManagement.getInstance().getArticleList());
artAtt.clearTextFields();
}
}