kann man methoden mit referenzen ausführen?

lightness

Grünschnabel
ich bin verzweifelt, java probier ich noch nicht lang und so richtig kuschelig fühlt es sich nicht an :-(

ok nach dieser eher gefühlvollen einleitung zum eigentlichen problem, ich hab folgende if bedingungen:

Code:
           if(allColumns >= 1){
                jTextField1.setText(rec.getString(1));
                jTextField1.setVisible(true);
                if(allColumns >= 2){
                    jTextField2.setText(rec.getString(2));
                    jTextField2.setVisible(true);
                    if(allColumns >= 3){
                        jTextField3.setText(rec.getString(3));
                        jTextField3.setVisible(true);
                        if(allColumns >= 4){
                            jTextField4.setText(rec.getString(4));
                            jTextField4.setVisible(true);
                            if(allColumns >= 5){
                                jTextField5.setText(rec.getString(5));
                                jTextField5.setVisible(true);
                                if(allColumns >= 6){
                                    jTextField6.setText(rec.getString(6));
                                    jTextField6.setVisible(true);
                                    if(allColumns >= 7){
                                        jTextField7.setText(rec.getString(7));
                                        jTextField7.setVisible(true);
                                        if(allColumns >= 8){
                                            jTextField8.setText(rec.getString(8));
                                            jTextField8.setVisible(true);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

in jeder anderen programmiersprache hätte ich es so gelöst:
(am bsp von actionscript)

Code:
for(i=0;i<8;i++) {
  tempvar = jTextField + i;
  if(allColumns >= (i+1)){
    _root[tempvar].setText(rec.getString(i+1));
    _root[tempvar].setVisible(true);
  }
}

aaaaaaber nicht so in java....eine andere möglichkeit wäre es die textfelder in ein array zu speichern und so anzusprechen aber bei diesem versuch habe ich die meldung "cannot resolve symbol" zu lieben gelernt...

Code:
Object[] myTextArray = new Object[8];
        for (int i = 0; i < myTextArray.length; i++)    
            myTextArray[i] = jTextField + (i+1);
        for (int i = 0; i < myTextArray.length; i++){
                if(allColumns >= (i+1)){
                      myTextArray[i].setText(rec.getString(i+1));
                      myTextArray[i].setVisible(true);
        }

also das geht wie gesagt auch nicht, weil er aus irgendeinem grund zwar das objekt referenziert aber dann nicht mit seinen methoden umgehen kann...

wenn irgendwer tips hat wie man die wurscht da oben verbessern kann, wär ich wirklich dankbar!

bye
Lightness
 
lightness hat gesagt.:
Code:
Object[] myTextArray = new Object[8];
        for (int i = 0; i < myTextArray.length; i++)    
            myTextArray[i] = jTextField + (i+1);
        for (int i = 0; i < myTextArray.length; i++){
                if(allColumns >= (i+1)){
                      myTextArray[i].setText(rec.getString(i+1));
                      myTextArray[i].setVisible(true);
        }

also das geht wie gesagt auch nicht, weil er aus irgendeinem grund zwar das objekt referenziert aber dann nicht mit seinen methoden umgehen kann...

wenn irgendwer tips hat wie man die wurscht da oben verbessern kann, wär ich wirklich dankbar!

bye
Lightness

- Ersetze
Code:
Object[] myTextArray = new Object[8];

durch
Code:
JTextField[] myTextArray = new JTextField[8];


- Ersetze
Code:
myTextArray[i] = jTextField + (i+1);

durch
Code:
myTextArray[i] = new JTextField();


Eine Durchnummerierung jTextField1 bis jTextField1000 o.ä. ist in Java weder vorgesehen noch notwendig.

BTW das Objekt wird zwar referenziert, aber nur als Object. Auf einem Object kann man eben keine Methoden eines JTextField aufrufen. Vor allem nicht, wenn es noch nicht einmal eine Instanz von JTextField gibt...
 
Hi habs grade ausprobiert, mein problem ist dass bei NetBeans (uns wird leider vorgergeben damit zu arbeiten) der initalisierungscode der textfelder gesperrt ist.

ich brauche also eine möglichkeit das textfeld zu dem textfeldarray nachträglich hinzuzufügen und bei myTextArray[0] = JTextField1; sagt er (wieder mal) "cannot resolve symbol".

das myTextArray hab ich jetzt global definiert als:

JTextField[] myTextArray = new JTextField[8];

dann wird die init() ausgeführt die nicht editierbar ist:

jTextField1 = new javax.swing.JTextField();
jTextField1.setText("--none--");
....

und nach aufruf der init() hab ich:

myTextArray[0] = JTextField1;

stehen (cannot resolve symbol)


die codezeilen gelten natürlich für alle 8 texfelder gleich.


maybe gibts da ne alternative drum rum als es gleich in ein array speichern zu wollen bei der instanzierung des textfeldes? lässt er mich nämlich nicht im netbeans.

greets
Lightness
 
Moin,
Du weisst aber schon, dass auf Groß-/Kleinschreibung zu achten ist?

Code:
JTextField[] myTextArray = new JTextField[8];

jTextField1 = new javax.swing.JTextField();
jTextField1.setText("--none--");

//und nach aufruf der init() hab ich:

myTextArray[0] = JTextField1;

// stehen (cannot resolve symbol)

Das kann natürlich so nicht funktionieren. So schon eher:
myTextArray[0] = jTextField1;

Ich rate aber dennoch von einer Nummerierung am Ende ab, ebenso bereitet ja offenbar die Groß-/Kleinschreibung Probleme. Vielleicht solltest Du dann nicht jTextField1-x verwenden als Variablennamen, sondern eher myTextField, wenn es schon sein muss. Einige Programmierer kürzen das JTextField mit jtf ab und hängen eine sprechende Bezeichnung dahinter: jtfName, wenn in dem TextField ein Name eingetragen wird, jtfDatum für eine Datumseingabe usw.
 
Zurück