Hallo,
ich habe ein bisschen Java programmiert und unter anderem eine class erstellt und eine Variable in Form dieser class definiert. Jetzt habe ich eine public method in meiner object class, die ich gerne von meinem eigentlichen Programm aus aufrufen möchte. Dazu habe ich "varable.meineMethod();" probiert; aus irgendeinem Grund findet der compiler die Methode jedoch nicht... obwohl sie ja vorhanden ist. Er spukt mir jedes Mal "cannont find symbol - method meineMethod()".
so wie du deine Frage stellst und nicht einmal den Code dazu postest kann man selbst einen Tippfehler deiner Seite vermuten,
bedenke:
es ist für jeden einzelnen der anderen 7 Milliarden Menschen auf der Welt unmöglich, dein Problem ohne Informationen nur durch Hellsehen zu lösen
Tut mir Leid, ich hatte den Post eben in ziemlicher Eile geschrieben, in der Hoffnung, es gäbe eine einfache, schnelle Antwort. Ich werde gleich mal den relevanten Code posten.
ein Objekt existiert doch nur selten für sich, ist meistens in einer Variablen abgelegt, die Bezeichnungen sind da ungenau/ fließend,
lohnt nicht darüber zu streiten,
nur Quellcode und konkrete Fehlermeldungen sind eine Grundlage
Ok, hier der Code, den ich bisher habe (es geht übrigens um einen JTable).
Deklaration der Variable und Aufruf der Method:
Java:
privatestaticJTable mTab =newJTable(newMyTableModel("","No data selected"));
mTab.loadNewData(cNames, data,2);
Das hier ist die class des Tables (MyTableModel):
Java:
classMyTableModelextendsAbstractTableModel{privateObject[][] data;privateString[] colNames;publicMyTableModel(String col,String txt){
data =newObject[1][1];
colNames =newString[1];
data[0][0]= txt;
colNames[0]= col;}publicMyTableModel(String[] tmpColNames,int copyMode){if(copyMode ==0){
colNames = tmpColNames;}else{
colNames =newString[tmpColNames.length];for(int i =0; i < tmpColNames.length; i++){
colNames[i]= tmpColNames[i];}}Object[][] data =newObject[1][colNames.length];for(int i =0; i < colNames.length; i++){
data[0][i]="-";}}publicMyTableModel(String[] tmpColNames,Object[][] tmpData,int copyMode){loadNewData(tmpColNames, tmpData, copyMode);}publicvoidloadNewData(String[] tmpColNames,Object[][] tmpData,int copyMode){//copyMode: if the arrays should be copied entirely or only the pointers//0=only pointers, 1=copy cNames properly, 2=copy data properly, 3=copy both arrays properlyif(copyMode==0){//copy pointers
colNames = tmpColNames;
data = tmpData;}elseif(copyMode==1){
data = tmpData;//copy cNames properly
colNames =newString[tmpColNames.length];for(int i =0; i < tmpColNames.length; i++){
colNames[i]= tmpColNames[i];}}elseif(copyMode==2){
colNames = tmpColNames;//copy data properly
data =newString[tmpData.length][tmpData[0].length];for(int i =0; i < tmpData.length; i++){for(int j =0; j < tmpData[0].length; i++){
data[i][j]= tmpData[i][j];}}}else{//copy cNames properly
colNames =newString[tmpColNames.length];for(int i =0; i < tmpColNames.length; i++){
colNames[i]= tmpColNames[i];}//copy data properly
data =newString[tmpData.length][tmpData[0].length];for(int i =0; i < tmpData.length; i++){for(int j =0; j < tmpData[0].length; i++){
data[i][j]= tmpData[i][j];}}}}}
Natürlich ist der Code nicht annähernd perfekt... ich bin ja auch erst Anfänger
Hoffe das hilft!
Aber die Zeile 2 deines ersten Snippets steht schon in einer Methode, oder? Und warum ist diese Tabelle überhaupt statisch? Und statt int's solltest du ein enum für den Type erstellen, oder zumindest statische, finale Variablen, welche dem Parameter sprechende Namen geben.
Die Methode laodNewData() kann nur auf einem Objekt vom Typ MyTableModel aufgerufen werden. Du rufst sie aber auf einem Objekt vom Typ JTable auf.
Lass Dir erst das Model der JTable zurückgeben:
MyTableModel data = mTab.getModel();
Sinnvoll dürfte es sein, wenn Du das Objekt gleich castest
MyTableModel data = (MyTableModel) mTab.getModel();
Jetzt hast Du rechts und links vom Gleichheitszeichen "irgendwas" (nämlich ein Objekt und eine Variable) vom Typ MyTableModel; und erst jetzt kannst du aufrufen: data.loadBlabla();
Aber die Zeile 2 deines ersten Snippets steht schon in einer Methode, oder? Und warum ist diese Tabelle überhaupt statisch? Und statt int's solltest du ein enum für den Type erstellen, oder zumindest statische, finale Variablen, welche dem Parameter sprechende Namen geben.
Ja, die 2. Zeile ist natürlich in einer Methode... die Tabelle war statisch, weil ich sie probeweiser mal als globale Variable definiert habe. Habe ich nicht richtig klargestellt; mein Fehler. Mit den enums werde ich mich noch mehr im Detail beschäftigen, danke für den Hinweis; bisher ist der Code ja auch nur eine pre-Alpha-Version, oder sowas.
C_A hat gesagt.:
Sinnvoll dürfte es sein, wenn Du das Objekt gleich castest
MyTableModel data = (MyTableModel) mTab.getModel();
Jetzt hast Du rechts und links vom Gleichheitszeichen "irgendwas" (nämlich ein Objekt und eine Variable) vom Typ MyTableModel; und erst jetzt kannst du aufrufen: data.loadBlabla();
Ok, mein Fehler war, dass ich annahm, der Compiler würde die Methods in MyTableModel automatisch auch für JTable-Objekte übernehmen... (naja, wie gesagt, Anfänger).
Danke für diesen Hinweis, mit diesem Code funktioniert es nun problemlos.
Danke an alle für die zahlreichen und schnellen Antworten! Super Forum :toll:.