invoke per button

Status
Nicht offen für weitere Antworten.
P

para_

Gast
hi,
ich hab da ne klasse die von nem object beliebiger klasse die klasse + die dazugehörigen methoden + parameterlisten ausliest um alle methoden dann über buttons ausführen zu können
ich habe für die parameter textfelder eingesetzt wo man dann halt den wert der parameter reinschreibt, darunter ist ein button der die methode auf das object aufrufen soll

das auslesen der parametertypen und der methoden klappt auch ganz gut, aber das ausführen per button will net so recht hinhaun

jemand ne idee? bzw überhaupt verstandn was ich will?^^


code gibs auch, is nur recht lang darum wollt ich erstmal schaun ob jemand vielleicht so eine idee hat, ansonsten post ich den code noch


mfg para_
 

Leroy42

Top Contributor
para_ hat gesagt.:
aber das ausführen per button will net so recht hinhaun

Ja und was sagt uns das?

- Läuft nur bei Instanzen ausgewählter Klassen, bei anderen nicht? ???:L
- Läuft nur Dienstag nachmittags? :shock:
- Läuft nur zur Hälfte? :autsch:

Wir verstehen schon was dein Programm machen soll,
aber nicht was es falsch macht!
 
A

Anmeldeboykottierer

Gast
HI,
kann Leroy42 nur zustimmen, keiner kann erraten wo genau dein Problem liegt. An sich denke ich aber mal, dass du mit Reflections gearbeitet haben wirst und wenn ich mich nicht ganz irre, kannst du damit dann auch geschützte Methoden auslesen (oder irre ich mich nur?).
Sollte dies der Fall sein, so ist klar, dass du zwar sehen wirst, dass es die gibt, die aber kaum aufrufen können wirst (dafür sorgt dann immer noch die Schutzklasse).

Anonsten wäre hier auch nicht dein gesamter Code interessant, sondern viel mehr die Stelle an der es scheitert und viel Text, der diese Stelle erklärt!

Gruß Der Anmeldeboykottierer
 
P

para_

Gast
nunja, ich habe probleme den actionlistener für die buttons hinzuzufügen

ich möchte ja dass man die parameter für die methoden per textfeld übergeben kann (das heisst also dass ich die parameter dann wenn ich den button klicke irgendwie in ein Object[] packe damit ich die als parameter im invoke übergeben kann)

im code ist o das object auf das sich das beziehen soll eben ;)

Code:
     // das panel erstmal nur, nix wichtiges
       paMethodAll = new JPanel();
       paMethodAll.setLayout(new BoxLayout(paMethodAll, BoxLayout.Y_AXIS));

       try {
           mCount=0;   // anzahl der methoden der klasse
           for ( Method method : o.getClass().getMethods() ) {

               Class[] parameterTypes = method.getParameterTypes();
               if(parameterTypes.length>mParamCount)
                         mParamCount=parameterTypes.length;   // anzahl der parameter der methode
               mCount++;
           }
       }
       catch(Exception exc) { System.out.println(exc); }

       paMethodEach = new JPanel[mCount];           
       btMethodEach = new XButton[mCount];
       tfMethodParamEach = new XTextField[mCount][mParamCount];


       try {
           i=0;
           for ( Method method : o.getClass().getMethods() ) {

               paMethodEach[i] = new JPanel();

               gridbag.setConstraints(paMethodEach[i], c);

               paMethodEach[i].setLayout(new GridLayout(0,2));

paMethodEach[i].setBorder(BorderFactory.createTitledBorder(method.getName()) );
               btMethodEach[i] = new XButton(method.getName());


               parameterTypes = method.getParameterTypes();
               parameterValues = new Object[parameterTypes.length];   // values für die parameter, da wird noch nichts zugewiesen, das kommt ja dann erst wenn man den button klickt

                 // Parameter auslesen und darstellen ( typ auf ein label, typ auch ins textfeld -> ändert man ja sowieso dann bei der eingabe)
               for ( int j = 0; j < parameterTypes.length; j++ ) {
                   String parameterString = parameterTypes[j].getName();
                   paMethodEach[i].add(new JLabel(parameterString));
                   tfMethodParamEach[i][j] = new XTextField(parameterString);
                   paMethodEach[i].add(tfMethodParamEach[i][j]);

               }
               btMethodEach[i].addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
 // hier müssen die values aus den PASSENDEN textfeldern gelesen werden, wie ich das schaffe weiss ich aba net, kan nix übergeben da das dann inner class is und ich eine variable von aussen dann als final deklarieren müsste.. :/
                        //  method.invoke(o, parameterValues); <<- so müsste man das ungefähr dann machen
                    }
               });


               paMethodEach[i].add(btMethodEach[i]);   // button ins panel der methode einfügen
               paMethodAll.add(paMethodEach[i]);    // methodenpanel ins gesamtpanel einfügen
               i++;
           }
       }
       catch(Exception exc) { System.out.println(exc); }

hoffe das reicht erstmal, wenn was unklar is dann bitte fragen :eek:
 

Tissi

Mitglied
Schreib doch eine Funktion außerhalb des ActionListeners, z.B. fetchParams(int nummer der Methode).
Die Nummer der Methode ist ja i, die kannst du im Actionlistener als Attribut abspeichern. wird dann der Button geklickt, ruft der ActionListener die Methode fetchParams mit der dazugehörenden nummer auf. Die Funktion muss dann die Parameter auslesen und als Object-Array zurückgeben.

Code:
public Object[] fetchParams(int methodIndex)
{
    Object[] params = new Object[tfMethodParamEach[methodIndex].length];
    for(int i = 0; i < params.length; i++)
    {
        params[i] = tfMethodParamEach[methodIndex][i].getText();
    }
    return params;
}

Ich habs nicht getestet, aber so in etwa müsste die Methode aussehen. Ich weiß nicht wie das mit überladenen Methoden geregelt ist, vielleicht muss also noch überprüft werden, welche Parameter überhaupt gesetzt sind.
 
P

para_

Gast
danke, ich hab es allerdings schon mit einem allgemeinen actionPerformed gelöst (vorher speichere ich die ganzen daten in ein globale arrays)

den typ der parameter hab ich dann halt explizit abgefragt (geht jetzt für die ganzen standard datentypen) und das reicht mir erstmal :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
H Unterschied EventQueue.invoke... und thread.start() Allgemeine Java-Themen 4
S Reflections (invoke-Methode) Allgemeine Java-Themen 13
faetzminator IllegalArgumentException bei Method.invoke() Allgemeine Java-Themen 6
S Active-X Call / Invoke?` Allgemeine Java-Themen 7
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
kenny1987 Frage zu getMethod und invoke Allgemeine Java-Themen 9
T invoke() einer Methode - Probleme mit Rückgabewert Allgemeine Java-Themen 5
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M JavaFX Button mit mehreren Aktionen? Allgemeine Java-Themen 7
G Drop down Button Menü (Combobox) Allgemeine Java-Themen 7
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
Tacofan Button nicht mehr anklickbar machen Allgemeine Java-Themen 8
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
J Java eigenen Button programmieren (ob Cursor im Rechteck ist oder nicht..../button pressed or not) Allgemeine Java-Themen 6
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
J JScrollPane und Button erscheinen nicht Allgemeine Java-Themen 13
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
B Button im Web klicken Allgemeine Java-Themen 4
C Java Excel Button Allgemeine Java-Themen 2
J Swing Eigenes Button-design Allgemeine Java-Themen 2
H WAV abspielen nach Button-Klick Allgemeine Java-Themen 4
G Button-Registrierung beim ActionListener erst NACH Tastendruck Allgemeine Java-Themen 2
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5
A Button drücken Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
M HTTP Selenium button klicken Allgemeine Java-Themen 2
K GUI-Button Inhalte vergleich - TicTacToe Grundriss Allgemeine Java-Themen 11
X Button während Thread aktiv ist disablen Allgemeine Java-Themen 11
C Button geben Fehlermeldung aus Allgemeine Java-Themen 5
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
F WebBrowser Button automatisch drücken Allgemeine Java-Themen 5
L mit Button jar.Datei öffnen? Allgemeine Java-Themen 5
1 URL mit Button öffnen Allgemeine Java-Themen 29
L Thread stoppen über Button funktioniert nicht Allgemeine Java-Themen 7
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
E JTidy html "hidden" Button drücken Allgemeine Java-Themen 7
G Button-Array überschreiben und dem Container zufügen? Allgemeine Java-Themen 2
G Icon auf Button Allgemeine Java-Themen 5
N Button Allgemeine Java-Themen 3
G Schleife durch Button beenden Allgemeine Java-Themen 6
G wenn Button geklickt -> regelmäßig Aktion ausführen Allgemeine Java-Themen 7
G default button für enter taste Allgemeine Java-Themen 3
T JTabbedPane nach Button-Klick wechseln Allgemeine Java-Themen 3
E Button disablen Allgemeine Java-Themen 8
T Button Array verschieben klappt nicht. Allgemeine Java-Themen 6
T Button Action Allgemeine Java-Themen 10
G swt button Allgemeine Java-Themen 6
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
P Button automatisch drücken Allgemeine Java-Themen 5
M bei Klick auf Button Datei einlesen Allgemeine Java-Themen 3
E Button mit 2zeiliger Beschriftung Allgemeine Java-Themen 3
ElViZ HTML-Button mit Java "drücken" lassen? Allgemeine Java-Themen 3
MQue Button setEnabled() Allgemeine Java-Themen 2
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
MQue Button Attribute setzen Allgemeine Java-Themen 14
MQue Button ansprechen Allgemeine Java-Themen 5
MQue Button erzeugen mit 3 Klassen Allgemeine Java-Themen 3
MQue Button mit Icon und Beschriftung Allgemeine Java-Themen 7
MQue Button Event beim drücken und beim auslassen Allgemeine Java-Themen 7
P JComponenten (Button, JSlider, usw) erweitern Allgemeine Java-Themen 12
E Button: Event auslösen Allgemeine Java-Themen 7
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
D Button-Sprache und windowClosing Allgemeine Java-Themen 6
G Text und Bild/Icon im Label/Button positionieren/ausrichten Allgemeine Java-Themen 2
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
D Bild per Button painten Allgemeine Java-Themen 5
V Button schließen - NullPointerException Allgemeine Java-Themen 6
H Button ist nicht ansprechbar Allgemeine Java-Themen 4
S 100 Fehler bei Button machen :) Allgemeine Java-Themen 9
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben