2011-01-13 9 views
1

Ich versuche, MVC-Design zu verfolgen und derzeit ein MouseAdapter in meiner Controller-Klasse zu erstellen. Ich habe ein Array mit der gleichen Größe wie das GridLayout in einer meiner Modellklassen. Wenn also jemand irgendwo im Raster auf ein JPanel klickt, würde ich den MouseAdapter dazu bringen, das Modell zu benachrichtigen und etwas zu tun. Die JPanels befinden sich in einer anderen Klasse, Ansicht.Position/Index eines JPanels in einem GridLayout erhalten?

Aber dafür brauche ich den Index/Position dieses bestimmten JPanel, gibt es einen Weg, es zu bekommen?

überprüfte ich die GetX und Gety Methoden der Mousegeführt, den Zustand:

GetX - Liefert die horizontale x-Position des Ereignis in Bezug auf die Quellkomponente.

Get Y - Gibt die vertikale y-Position des Ereignisses relativ zur Quellkomponente zurück.

Bezieht sich die obere linke Ecke des JPanels relativ zur Quellkomponente auf 0, 0? Woher weiß ich dann, auf welches der Panels im GridLayout geklickt wurde?

Antwort

0

Sie eine Karte in der Ansichtsklasse bauen könnte und ein ein Verfahren

public void getJPanelPos(JPanel panel) 

die Position der JPanel Quelle tyhe Ereignis

1

Legen Sie die Informationen, die Sie benötigen in der Maus-Listener erstellen abzurufen, Sie fügen der Komponente hinzu. Es ist einfacher, dies in der Einrichtung als Mappings und Lookups zu tun.

+0

Wie lege ich etwas, was ich nicht habe? Ich weiß nicht, auf welches JPanel geklickt wird, deshalb brauche ich den Index. Wenn Sie das GridLayout hinzufügen, tun Sie etwas wie setLayout (new GridLayout (8, 8)). Ich brauche diese zwei Zahlen für das bestimmte JPanel, auf das geklickt wird. Gibt es eine Möglichkeit, das Raster zu durchlaufen, als wäre es ein Array mit zwei For-Schleifen? Dann vergleichen Sie vielleicht jedes Element mit event.getSource()? Die JPanels sind wahrscheinlich nicht eindeutig, funktionieren also möglicherweise nicht so. –

+0

Ich würde es tendenziell so orgnanise: Schleife über Zeilen (und Spalten) Aufruf einer Methode zum Hinzufügen jeder Komponente. 'für (int row = 0; row

+0

Hmm das könnte funktionieren, aber der MouseAdapter ist in einer anderen Klasse als die mit den JPanels definiert. Eine Frage, zwei "verschiedene" JPanels beziehen sich immer auf zwei verschiedene Objekte oder? Auch wenn sie die gleiche Farbe haben usw.? Denn dann könnte ich ein Array von JPanels erstellen und einen Verweis zwischen jedem JPanel und jedem JPanel erstellen, das zum GridLayout hinzugefügt wird, dann getSource() und den Verweis vergleichen und sehen, ob sie sich auf das gleiche Objekt beziehen und von dort den Index bekommen aus dem variablen Array? –

Verwandte Themen