Hallöchen,
Ich habe ein kleines Problem mit meinem Javaprogramm, ins besondere mit Swing.
Bin ein Anfänger, kann es also vielleicht nicht soo gut erklären wie ich es sollte...aber ich probiers mal.
Ich habe eine Konsolenanwendung geschrieben. Die Idee war, eine kleine Tabelle zu basteln. Wenn ich eine Zahl in einer Zelle änder, soll das Ergebnis in einer anderen Zelle automatisch aktualisiert werden. Das Programm ist fertig.
Nun muss ich aber jedes mal die Start.class editieren, wenn ich eine Zahl ändern möchte, via a.Zelle(5); z.B. Meine Objekte, z.B. j.AdditionsZelle(a, b); greift auf die Zelle a zu, mittels observer pattern wird das Ergebnis geupdatet. Der Quellcode wird am Ende hier rein gesetzt.
Da ich das aber sehr blöde finde, jedes mal das Programm zu öffnen, neu zu compilieren um eine Zahl zu ändern, möchte ich das auf Swing übertragen.
Eine kleine Tabelle, 4x4 Felder, die ersten drei Reihen sind normale Zellen wo ich Zahlen reinschreibe. Die untere Reihe greift auf verschiedene Zellen zu (immer auf zwei, im Quellcode festgelegte Zellen) und soll automatisch geupdatet werden. Vergleichbar mit Excel in Mega-Mini-Format. xP
Ich kenne mich mit Swing absolut nicht aus, und kriege es einfach nicht hin meine Zellen dort in eine Tabelle einzutragen.
Eine Tabelle erstelle ich ja mit
So werden in die Zelle einfach die Buchstaben geschrieben. Wie kann ich jetzt meine vorgefertigten Zellen dort einfügen?
Bitte um Hilfe.
Quellcode des Konsolenprogramms folgt.
Jede Klasse ist eine eigene Datei, alles im gleichen Package. So sollte das ganze auch bleiben. Nur, dass wenn ich Start ausführe, ich meine Zellen schön in einer Tabelle habe.
Ich wäre sehr dankbar, wenn mir jemand z.B. die Zellen so anfertigen könnte, mir oder zumindest sagen könnte wie ich es hinkriege.
Damit kann ich ja dann meine anderen Rechenzellen fertig machen.
public class Start
{
public static void main ( String[] args )
{
Zelle a = new Zelle("a");
Zelle b = new Zelle("b");
Zelle c = new Zelle("c");
Zelle d = new Zelle("d");
Zelle e = new Zelle("e");
Zelle f = new Zelle("f");
Zelle g = new Zelle("g");
Zelle h = new Zelle("h");
Zelle i = new Zelle("i");
Zelle j = new Zelle("j");
Zelle k = new Zelle("k");
a.setWert(1);
b.setWert(1);
c.setWert(1);
d.setWert(1);
e.setWert(1);
f.setWert(1);
g.setWert(1);
h.setWert(1);
i.setWert(1);
j.setWert(1);
k.setWert(1);
AdditionsZelle l = new AdditionsZelle(a, b, "l");
SubtraktionsZelle m = new SubtraktionsZelle(l, a, "m");
MultiplikationsZelle n = new MultiplikationsZelle(l, k, "n");
DivisionsZelle o = new DivisionsZelle(n, m,"o");
a.setWert(7);
//hier setze ich den Wert der Zelle a auf 7.
// Dann wird AdditionsZelle und SubtraktionsZelle aktualisiert, da diese auf a zugreifen.
// Die MultiplikationsZelle wird ebenfalls ausgeführt, da diese auf die AdditionsZelle l zugreift. Und immer so weiter...
}
}
Alles anzeigen
import java.util.ArrayList;
import java.util.List;
public class Zelle implements Observable
{
List<Observer>observers = new ArrayList<Observer>();
private Integer wert = 0;
private String name;
public Zelle (String name)
{
this.name = name;
}
public void registerObserver(Observer observer)
{
observers.add(observer);
}
public void removeObserver(Observer observer)
{
observers.remove(observer);
}
public void change()
{
for(Observer observer : observers)
{
observer.onChange();
}
}
public void setWert( int wert )
{
this.wert = wert;
change();
}
public int getWert()
{
return wert;
}
public String getName()
{
return name;
}
}
Alles anzeigen
public class SubtraktionsZelle extends Zelle implements Observer
{
private Zelle zelle1;
private Zelle zelle2;
private Integer result = 0;
private Integer zahl1 = 0;
private Integer zahl2 = 0;
public SubtraktionsZelle( Zelle zelle1, Zelle zelle2, String name )
{
super(name);
this.zelle1 = zelle1;
this.zelle2 = zelle2;
zelle1.registerObserver(this);
zelle2.registerObserver(this);
}
public void onChange()
{
int zahl1 = zelle1.getWert();
int zahl2 = zelle2.getWert();
int result = zahl1-zahl2;
System.out.println(zelle1.getName() + " - " + zelle2.getName() + " = " + result);
setWert(result);
}
}
Alles anzeigen
public interface Observable
{
public void registerObserver(Observer observer);
public void removeObserver(Observer observer);
public void change();
}
public class MultiplikationsZelle extends Zelle implements Observer
{
private Zelle zelle1;
private Zelle zelle2;
private Integer zahl1 = 0;
private Integer zahl2 = 0;
private Integer result = 0;
public MultiplikationsZelle( Zelle zelle1, Zelle zelle2, String name)
{
super(name);
this.zelle1 = zelle1;
this.zelle2 = zelle2;
zelle1.registerObserver(this);
zelle2.registerObserver(this);
}
public void onChange()
{
int zahl1 = zelle1.getWert();
int zahl2 = zelle2.getWert();
int result = zahl1*zahl2;
System.out.println(zelle1.getName() + " * " + zelle2.getName() + " = " + result);
setWert(result);
}
}
Alles anzeigen
public class DivisionsZelle extends Zelle implements Observer
{
private Zelle zelle1;
private Zelle zelle2;
private Integer zahl1 = 0;
private Integer zahl2 = 0;
private Integer result = 0;
public DivisionsZelle( Zelle zelle1, Zelle zelle2, String name )
{
super(name);
this.zelle1 = zelle1;
this.zelle2 = zelle2;
zelle1.registerObserver(this);
zelle2.registerObserver(this);
}
public void onChange()
{
int zahl1 = zelle1.getWert();
int zahl2 = zelle2.getWert();
int result = zahl1 / zahl2;
System.out.println(zelle1.getName() + " / " + zelle2.getName() + " = " + result);
setWert(result);
}
}
Alles anzeigen
public class AdditionsZelle extends Zelle implements Observer
{
private Zelle zelle1;
private Zelle zelle2;
private Integer zahl1 = 0;
private Integer zahl2 = 0;
private Integer result = 0;
public AdditionsZelle( Zelle zelle1, Zelle zelle2, String name )
{
super(name);
this.zelle1 = zelle1;
this.zelle2 = zelle2;
zelle1.registerObserver(this);
zelle2.registerObserver(this);
}
public void onChange()
{
int zahl1 = zelle1.getWert();
int zahl2 = zelle2.getWert();
int result = zahl1 + zahl2;
System.out.println(zelle1.getName() + " + " + zelle2.getName() + " = " + result);
setWert(result);
}
}
Alles anzeigen