Hallo zusammen
Vorabinformation:
Ich nutze Eclipse Indigo und programmiere mit jre/jdk1.6 auf einem MacbookPro. Im Eclipse habe ich das Plugin Jigloo integriert welches mir bei meinen anfänglichen GUI-Schritten sehr hilft... gemäss Internet läuft es mit Swing/SWT.
Nun zum Problem:
Ich kämpfe nun schon seit gut drei Tagen mit meinem Javaprogramm... es hat alles soweit wie gewollt funktioniert. Nun ist mir aber die Idee gekommen im "HauptGUI" könnte ich eigentlich auch noch eine jTable erstellen anstatt eine jList, also habe ich die jList ausgetauscht und fleissig angefangen überall den Code anzupassen... die jTable in dieser Form verwende ich bereits bei einem weiteren Fenster das zusätzlich aufgerufen wird, allerdings habe ich beim Aufbauen des GUIs kein Problem da ich dort bereits Daten mitgeben kann. Auf dem HauptGUI kann ich dies aber nicht. Die jTables werden mit einer eigenen Klasse gefüttert die das AbstractTableModel extended.
Und im Voraus entschuldigt bitte den seeeeeeeeehr schlechten Code im Auge eines professionellen Programmierers.. ich habe vor 2 Monaten mit Java wieder angefangen, hatte davor etwas Erfahrung mit Programmieren mit VB.NET und habe einen 3 Tage Crashkurs Java hinter mir. Der Code ist entstanden aus Ideen, Java-lern-ebooks lesen und im Internet nachschlagen wie man es lösen könnte.
Hier erstmal der Code:
Ich habe 2 Packages:
_____Package1: Daten_____
Class: Army
Class: Equipment
Class: MyTableModel
Class: Player
Class: Unit
Beim starten des MainGUI's erscheint nun die Fehlermeldung dass er mir die getRowCount() von meinem MyTableModel nicht aufrufen kann, ist ja eigentlich auch logich weil die Liste im Instanzierten Model leer ist. Aber ich habe keine Daten hier zu übergeben, ich habe bereits mit IF-Abfragen versucht alles abzufangen und ein Returnwert von "0" zu geben bei getRowCount() aber da hat es ebenso ein Fehler gespuckt... Gibts eine elegantere Lösung?
Ich will beim Aufbauen des GUIs einfach eine jTable mit den Spaltenüberschriften aber noch keine Daten darin, doch wie kriege ich das mit einem AbstractTableModel hin?
Gruss
Kneubi
Vorabinformation:
Ich nutze Eclipse Indigo und programmiere mit jre/jdk1.6 auf einem MacbookPro. Im Eclipse habe ich das Plugin Jigloo integriert welches mir bei meinen anfänglichen GUI-Schritten sehr hilft... gemäss Internet läuft es mit Swing/SWT.
Nun zum Problem:
Ich kämpfe nun schon seit gut drei Tagen mit meinem Javaprogramm... es hat alles soweit wie gewollt funktioniert. Nun ist mir aber die Idee gekommen im "HauptGUI" könnte ich eigentlich auch noch eine jTable erstellen anstatt eine jList, also habe ich die jList ausgetauscht und fleissig angefangen überall den Code anzupassen... die jTable in dieser Form verwende ich bereits bei einem weiteren Fenster das zusätzlich aufgerufen wird, allerdings habe ich beim Aufbauen des GUIs kein Problem da ich dort bereits Daten mitgeben kann. Auf dem HauptGUI kann ich dies aber nicht. Die jTables werden mit einer eigenen Klasse gefüttert die das AbstractTableModel extended.
Und im Voraus entschuldigt bitte den seeeeeeeeehr schlechten Code im Auge eines professionellen Programmierers.. ich habe vor 2 Monaten mit Java wieder angefangen, hatte davor etwas Erfahrung mit Programmieren mit VB.NET und habe einen 3 Tage Crashkurs Java hinter mir. Der Code ist entstanden aus Ideen, Java-lern-ebooks lesen und im Internet nachschlagen wie man es lösen könnte.
Hier erstmal der Code:
Ich habe 2 Packages:
_____Package1: Daten_____
Class: Army
Java:
package Daten;
import java.util.ArrayList;
public class Army {
public String strArmyName;
public Boolean bolFlying = false;
public Boolean bolMechanized = false;
public Boolean bolTired = false;
public Boolean bolFortified = false;
public Boolean bolVigliant = false;
public Boolean bolAntiScouting = false;
public Boolean bolUnderArtilleryFire = false;
public Boolean bolWithoutHQ = false;
public Integer intArmyPointCosts;
public Integer intArmyMovment;
public Integer intArmySight;
public ArrayList<Unit> alUnit = new ArrayList<Unit>();
public Army(){
}
public Army(String newArmy){
strArmyName = newArmy;
}
public String toString(){
return strArmyName;
}
public void addUnit(String UnitAdd){
// Integer i;
Unit objUnit = new Unit(UnitAdd);
alUnit.add(objUnit);
// Object ai[] = alUnit.toArray();
// for (i = 0; i < ai.length; i++){
// System.out.println(ai[i]);
// }
}
public Boolean getBolFlying() {
return bolFlying;
}
public void setBolFlying(Boolean bolFlying) {
this.bolFlying = bolFlying;
}
public Boolean getBolMechanized() {
return bolMechanized;
}
public void setBolMechanized(Boolean bolMechanized) {
this.bolMechanized = bolMechanized;
}
public Boolean getBolTired() {
return bolTired;
}
public void setBolTired(Boolean bolTired) {
this.bolTired = bolTired;
}
public Boolean getBolFortified() {
return bolFortified;
}
public void setBolFortified(Boolean bolFortified) {
this.bolFortified = bolFortified;
}
public Boolean getBolVigliant() {
return bolVigliant;
}
public void setBolVigliant(Boolean bolVigliant) {
this.bolVigliant = bolVigliant;
}
public Boolean getBolAntiScouting() {
return bolAntiScouting;
}
public void setBolAntiScouting(Boolean antiScouting) {
bolAntiScouting = antiScouting;
}
public Boolean getBolUnderArtilleryFire() {
return bolUnderArtilleryFire;
}
public void setBolUnderArtilleryFire(Boolean bolUnderArtilleryFire) {
this.bolUnderArtilleryFire = bolUnderArtilleryFire;
}
public Boolean getBolWithoutHQ() {
return bolWithoutHQ;
}
public void setBolWithoutHQ(Boolean bolWithoutHQ) {
this.bolWithoutHQ = bolWithoutHQ;
}
}
Class: Equipment
Java:
package Daten;
public class Equipment {
public String strEquipmentName;
public Integer intEquipmentPointCosts;
public Equipment(String newUnit){
strEquipmentName = newUnit;
}
public Equipment(String newUnit, Integer newEquipmentCosts){
strEquipmentName = newUnit;
intEquipmentPointCosts = newEquipmentCosts;
}
public String getStrEquipmentName() {
return strEquipmentName;
}
public void setStrEquipmentName(String strEquipmentName) {
this.strEquipmentName = strEquipmentName;
}
public Integer getIntEquipmentPointCosts() {
return intEquipmentPointCosts;
}
public void setIntEquipmentPointCosts(Integer intEquipmentPointCosts) {
this.intEquipmentPointCosts = intEquipmentPointCosts;
}
}
Class: MyTableModel
Java:
package Daten;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
* @author sash
*/
public class MyTableModel extends AbstractTableModel{
private static final String[] HEADER = {"Slot", "Unitname", "Points", "Flying", "Mechanized", "Equipment"};
private List<Unit> data;
public Integer IntDataSize;
public MyTableModel() {
}
public MyTableModel(List<Unit> data) {
this.data = data;
}
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return HEADER.length;
}
public Object getValueAt(int row, int column) {
Unit unit = data.get(row);
switch(column){
case 0: return unit.getStrSlot();
case 1: return unit.getStrUnitName();
case 2: return unit.getIntPointCosts();
case 3: return unit.getBolFlying();
case 4: return unit.getBolMechanized();
default: return "";
}
}
@Override
public String getColumnName(int column) {
return HEADER[column];
}
// Hier kann man die Klasse für eine Spalte ändern.
@Override
public Class<?> getColumnClass(int column) {
if(column == 3){
return Boolean.class;
}
if(column == 4){
return Boolean.class;
}
if(column == 5){
return Boolean.class;
}
return super.getColumnClass(column);
}
}
Class: Player
Java:
package Daten;
import java.util.ArrayList;
public class Player {
public String strPlayerName;
public String strFelderory[];
public String strArmysory[];
public int intIAP;
public String strIAPHistory[];
public int intTAP;
public String strTAPHistory[];
public int intKP;
public String strKPHistory[];
public int intSP;
public String strSPHistory[];
public int intSTP;
public String strSTPHistory[];
public ArrayList<Army> alArmy = new ArrayList<Army>();
public Player() {
}
public Player(String newPlayer) {
strPlayerName = newPlayer;
}
public String getStrPlayerName() {
return strPlayerName;
}
public void setStrPlayerName(String strPlayerName) {
this.strPlayerName = strPlayerName;
}
public int getIntIAP() {
return intIAP;
}
public void setIntIAP(int intIAP) {
this.intIAP = intIAP;
}
public int getIntTAP() {
return intTAP;
}
public void setIntTAP(int intTAP) {
this.intTAP = intTAP;
}
public int getIntKP() {
return intKP;
}
public void setIntKP(int intKP) {
this.intKP = intKP;
}
public int getIntSP() {
return intSP;
}
public void setIntSP(int intSP) {
this.intSP = intSP;
}
public int getIntSTP() {
return intSTP;
}
public void setIntSTP(int intSTP) {
this.intSTP = intSTP;
}
public String toString() {
return strPlayerName;
}
public void addArmy(String ArmyAdd){
Army objArmy = new Army(ArmyAdd);
alArmy.add(objArmy);
}
public void deleteAllArmys(){
Integer i;
for (i = 0; i < alArmy.toArray().length; i++) {
alArmy.remove(i);
}
}
public void deleteOneArmy(Object y){
alArmy.remove(y);
}
}
Class: Unit
Java:
package Daten;
public class Unit {
public String strUnitName;
public Integer intPointCosts = 0;
public Boolean bolFlying = false;
public Boolean bolMechanized = false;
public String strSlot;
public String strAllInfo;
public Integer intBasicPointCosts = 0;
public Integer intEquipmentCosts = 0;
public Unit(String newUnit){
strUnitName = newUnit;
}
public Unit(String newUnit, String newUnitSlotObject, Integer newUnitCosts){
strUnitName = newUnit;
intPointCosts = newUnitCosts;
strSlot = newUnitSlotObject.toString();
}
public Unit(String newUnit, String newUnitSlotObject, Integer newUnitCosts, Boolean newBolFlying, Boolean newBolMechanized){
strUnitName = newUnit;
intBasicPointCosts = newUnitCosts;
strSlot = newUnitSlotObject.toString();
bolFlying = newBolFlying;
bolMechanized = newBolMechanized;
intPointCosts = intBasicPointCosts + intEquipmentCosts;
}
public String toString(){
return strUnitName;
}
public String toStringAll(){
strAllInfo = strSlot + "--" + strUnitName + "--" + intPointCosts + "-- Flying " + bolFlying + "-- Mechanized " + bolMechanized;
return strAllInfo;
}
public Boolean getBolFlying() {
return bolFlying;
}
public void setBolFlying(Boolean bolFlying) {
this.bolFlying = bolFlying;
}
public Boolean getBolMechanized() {
return bolMechanized;
}
public void setBolMechanized(Boolean bolMechanized) {
this.bolMechanized = bolMechanized;
}
public String getStrSlot() {
return strSlot;
}
public void setStrSlot(String strSlot) {
this.strSlot = strSlot;
}
public String getStrUnitName() {
return strUnitName;
}
public void setStrUnitName(String strUnitName) {
this.strUnitName = strUnitName;
}
public Integer getIntPointCosts() {
return intPointCosts;
}
public void setIntPointCosts(Integer intPointCosts) {
this.intPointCosts = intPointCosts;
}
public Integer getIntBasicPointCosts() {
return intBasicPointCosts;
}
public void setIntBasicPointCosts(Integer intBasicPointCosts) {
this.intBasicPointCosts = intBasicPointCosts;
}
public Integer getIntEquipmentCosts() {
return intEquipmentCosts;
}
public void setIntEquipmentCosts(Integer intEquipmentCosts) {
this.intEquipmentCosts = intEquipmentCosts;
}
}
Beim starten des MainGUI's erscheint nun die Fehlermeldung dass er mir die getRowCount() von meinem MyTableModel nicht aufrufen kann, ist ja eigentlich auch logich weil die Liste im Instanzierten Model leer ist. Aber ich habe keine Daten hier zu übergeben, ich habe bereits mit IF-Abfragen versucht alles abzufangen und ein Returnwert von "0" zu geben bei getRowCount() aber da hat es ebenso ein Fehler gespuckt... Gibts eine elegantere Lösung?
Ich will beim Aufbauen des GUIs einfach eine jTable mit den Spaltenüberschriften aber noch keine Daten darin, doch wie kriege ich das mit einem AbstractTableModel hin?
Gruss
Kneubi
Zuletzt bearbeitet: