2016-11-21 3 views
0

Ich verarbeite eine Reihe von JDialog-Komponenten, die nach einem bestimmten Typ mit einer bestimmten Client-Eigenschaft suchen. Ich verstehe, wie man eine client-Eigenschaft überprüft, aber ich kann keine Methode finden, die den Komponententyp als String zurückgibt. Ich möchte so etwas wie dies zu tun:So ermitteln Sie den Komponententyp

Component[] fields = timeLineDialog.getContentPane().getComponents(); 
for (Component field : fields) { 
    if (field.<getType>.equals("JComboBox") { 
     . 
     . 
     . 
} 

ich die Komponenten bekommen, aber ich kann nicht herausfinden, wie die Art zu bestimmen. Für welche Methode (n) kann ich verwenden? TIA.

+0

getClass() getName() gibt die Laufzeit classname. Aber Java empfiehlt, die instanceof Anweisung zu verwenden. –

+0

Ihre Anfrage klingt, als hätten Sie ein Designproblem. Lesen Sie über das MVC/MVVC-Muster und ändern Sie dann Ihren Code, damit Sie mit * Listeners * an diesen Input-Komponenten arbeiten können, indem Sie das Modell ändern, anstatt eine gottgleiche Klasse zu haben. –

+0

Ich schaue mir das an, aber ich bin mir nicht sicher, wie ich dadurch eine bestimmte Komponente finden kann, wenn ich sie brauche. –

Antwort

1

Verwenden Sie den Operator instanceof.

for (Component field : fields) { 
    if (field instanceof JComboBox) { 
     // do something 
    } else if (field instanceof JButton) { 
     // do something 
    } else if (field instanceof JPanel) { 
     // do something 
    } 
} 

See. http://www.java2s.com/Tutorial/Java/0060__Operators/TheinstanceofKeyword.htm

+0

Es scheint keine getClass-Methode für 'Komponenten' zu geben. Ich denke, ich würde eine switch-case-Anweisung verwenden müssen, um jeden möglichen Komponententyp zu verarbeiten, um den einen zu finden, den ich will, wenn ich Instanz von verwende. Kann das ein Schalterfall? –

+0

Sie können mit verschachtelten 'if's gehen. Aber denken Sie an den Hinweis @TimothyTruckle und überdenken Sie das Design Ihres Codes. Solltest du wirklich die Klasse der Komponenten testen? Vielleicht könnte ein anderer Ansatz geeigneter sein. – Gabriel

+0

Ich bin mir nicht sicher warum, aber meine IDE (Eclipse) ursprünglich nicht die Class() -Methode für 'Feld'. Als ich meine Entwicklung beendete und später wieder startete, tauchte sie plötzlich auf, genauso wie die Methode getNameByType(). Ich brauchte das für Debugging-Zwecke, aber ich habe meine Methodik geändert und verwende instanceof. Vielen Dank. –

Verwandte Themen