Hallo!
Bin seit heute ein neues Mitglied!
Habe mich angemeldet, weil ich ein Problem habe bei einem kleinen Programm.
Folgendes Programm:
Es soll ein Programm erstellt werden das Lieferanten in einer Tabelle auflistet, des Weiteren soll ein Button zur Verfügung stehen, der es erlaubt weiter Einträge zu erstellen.
Zuerst habe ich eine Klasse Lieferant.java erstellt die, die Lieferanten speichert:
Hier zu habe ich nun mein Datenmodell geschrieben:
Nun habe ich eine Klasse JTableSupplier.java erstellt, wo die Tabelle und das Modell erstellt werden:
Dieses Programm funktioniert auch grundsätzlich, jedoch muss ich die Spaltengröße zuvor verändern, damit die neuen Einträge angezeigt werden können. Könnte es sein, dass dieses Problem an den JTableListener liegt?
Ich würde mich über jede Hilfe und jeden Tipp freuen.
Mfg, joulsf
Bin seit heute ein neues Mitglied!
Habe mich angemeldet, weil ich ein Problem habe bei einem kleinen Programm.
Folgendes Programm:
Es soll ein Programm erstellt werden das Lieferanten in einer Tabelle auflistet, des Weiteren soll ein Button zur Verfügung stehen, der es erlaubt weiter Einträge zu erstellen.
Zuerst habe ich eine Klasse Lieferant.java erstellt die, die Lieferanten speichert:
Java:
public class Lieferant {
private static int nr=1;
private int nummer;
private String firma;
private String kontanktperson;
private String position;
private String strasse;
private String ort;
private String region;
private String plz;
private String land;
private String telefon;
public Lieferant(){
nummer=nr++;
}
public Lieferant( String firma, String kontanktperson,
String position, String strasse, String ort, String region,
String plz, String land, String telefon) {
this();
this.firma = firma;
this.kontanktperson = kontanktperson;
this.position = position;
this.strasse = strasse;
this.ort = ort;
this.region = region;
this.plz = plz;
this.land = land;
this.telefon = telefon;
}
//Hier folgen Getters und Setters für jedes Attribut
}
Hier zu habe ich nun mein Datenmodell geschrieben:
Java:
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class ModelSupplier extends AbstractTableModel{
Vector<Lieferant> supplier=new Vector<Lieferant>();
Vector<TableModelListener> ListenerList=new Vector<TableModelListener>();
String []columnNames={"Nummer","Firma","Kontaktperson","Position","Strasse","Ort","Region","PLZ","Land","Telefon"};
//Fügt neuen Lieferanten hinzu:
public void addSupplier(Lieferant l){
int SizeSupplier=supplier.size();
supplier.add(l);
TableModelEvent e = new TableModelEvent( this, SizeSupplier,TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT );
for( int i = 0, n = ListenerList.size(); i<n; i++ ){
((TableModelListener)ListenerList.get( i )).tableChanged( e );
}
}
//Anzahl der Spalten
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 10;
}
//Anzahl der Zeilen
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return supplier.size();
}
//Rückgabe der Werte
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
switch(columnIndex){
case 0: return supplier.get(rowIndex).getNummer();
case 1: return supplier.get(rowIndex).getFirma();
case 2: return supplier.get(rowIndex).getKontanktperson();
case 3: return supplier.get(rowIndex).getPosition();
case 4: return supplier.get(rowIndex).getStrasse();
case 5: return supplier.get(rowIndex).getOrt();
case 6: return supplier.get(rowIndex).getRegion();
case 7: return supplier.get(rowIndex).getPlz();
case 8: return supplier.get(rowIndex).getLand();
case 9: return supplier.get(rowIndex).getTelefon();
}
return null;
}
//Für die Spaltenüberschirft
public String getColumnName(int col) {
return columnNames[col];
}
//Rückgabe der Klasse
public Class getColumnClass(int c) {
//Object o=getValueAt(0,c);
//Class<Object> cl=(Class<Object>)o.getClass();
//System.out.println(o.getClass());
// return getValueAt(0, c).getClass().getSuperclass();
return Lieferant.class;
}
//Editable damit die Tabelle erweiterbar ist
public boolean isCellEditable(int row, int col) {
if (col < 0) {
return false;
} else {
return true;
}
}
//Hinzufügen der Listener
public void addTableModelListener(TableModelListener listener){
ListenerList.add(listener);
}
//Entfernen von Listener
public void removeTableModelListener(TableModelListener listener){
ListenerList.remove(listener);
}
}
Nun habe ich eine Klasse JTableSupplier.java erstellt, wo die Tabelle und das Modell erstellt werden:
Java:
import java.awt.FlowLayout;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JTableSupplier extends JFrame{
JButton b;
JTable table;
static ModelSupplier m;
JPanel pl;
public JTableSupplier(){
this.setLayout(new FlowLayout());
pl= new JPanel();
m=new ModelSupplier();
table=new JTable(m);
table.setSize(500, 300);
pl.add(new JScrollPane(table));
this.add(pl);
b=new JButton("Add Supplier");
b.addActionListener(new ActionListener(){
int index=0;
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
createSupplier(index);
index++;
}
});
this.add(b);
this.pack();
}
//Erzeugen eines neuen Eintrags:
public static void createSupplier(int index){
index%=5;
switch(index){
case 0: m.addSupplier(new Lieferant("Fischer","Hr. Anders","CEO","Gartenstrasse 3","Holzhausen","Donautal","A-4545","Österreich","2020"));
break;
case 1: m.addSupplier(new Lieferant("XYZ","Hr. Cisco","CEO","Gartenstrasse 3","Holzhausen","Donautal","A-4545","Österreich","2020"));break;
case 2: m.addSupplier(new Lieferant("ABC","Hr. SMTP","CEO","Gartenstrasse 3","Holzhausen","Donautal","A-4545","Österreich","2020"));break;
case 3: m.addSupplier(new Lieferant("DEFG","Hr. FTP","CEO","Gartenstrasse 3","Holzhausen","Donautal","A-4545","Österreich","2020"));break;
case 4: m.addSupplier(new Lieferant("HIJK","Hr. Telnet","CEO","Gartenstrasse 3","Holzhausen","Donautal","A-4545","Österreich","2020"));break;
}
}
//Main-Klasse die Frame erzeugt:
public static void main(String[] args) {
JTableSupplier s=new JTableSupplier();
//s.setSize(500,500);
s.pack();
s.setVisible(true);
}
}
Dieses Programm funktioniert auch grundsätzlich, jedoch muss ich die Spaltengröße zuvor verändern, damit die neuen Einträge angezeigt werden können. Könnte es sein, dass dieses Problem an den JTableListener liegt?
Ich würde mich über jede Hilfe und jeden Tipp freuen.
Mfg, joulsf