PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MouseListener auf Grafik



Jana
02-07-2006, 12:49
Gibt es eine Möglichkeit auf eine Grafik einen Mouselistener zu legen?

public void zeichneDich(Graphics grap)
{grap.fillRoundRect(Breite,Hoehe, Breite,Hoehe,Rundung,Rundung);}

Es soll beim Doppelklick auf das Rechteck ein neues Fenster aufgehen.

bischi
02-07-2006, 13:06
Die Grafik auf einen Button/Label/Panel... legen...

MfG Bischi

Jana
02-07-2006, 21:46
Uh, das wird ganz schön schwierig.
Ich habe schon eine ganze Menge an Schachtelungen durch die Scrollbars.

Jana
03-07-2006, 14:15
Deine Idee habe ich jetzt realisiert.
Es klappt wunderbar.
Doch jetzt habe ich ein absolutes Anfängerproblem
Ich habe eineTextarea

JTextArea person = new JTextArea();
person.setBounds(x,y,Breite,Hoehe);
person.addMouseListener(this);
this.add(person);

Allerdings brauche ich jetzt ca 1000 solcher JTextAreas.
Gibt es da eine Schleife?
In PHP mache ich das mit einem Array!?!?

Detrius
03-07-2006, 15:38
Und warum sollte ein Array in Java nicht gehen? ;)

Jana
03-07-2006, 16:31
Weil ich die Syntax nicht kenne und auch nicht finde; ist eben trivial.

private JTextArea person[] = new JTextArea[100];

for(int i=1; i<3; i++){
person[i] = new JTextArea();
person[i].setBounds(x,y,Breite,Hoehe);
}

Funktioniert eben nicht!

anda_skoa
03-07-2006, 17:04
1000, in Worten "tausend", TextAreas in einem Parent? :eek:

Aber deine Schleife sollte gehen, nur besser bei 0 starten, Java Arrays beginnen bei Index 0.
Was ist denn das beobachtete Fehlverhalten? Oder kompiliert es nicht?

Ciao,
_

bischi
03-07-2006, 17:21
Objekte (in diesem Fall JTextArea kannst du nicht als Array erzeugen! afaik). Abhilfe: Ein Objekt JTextArea machen und danach 1000 mal mittels new ein neues Objekt erzeugen. Danach gibts eine Funktion (Namen weiss ich gerade nicht mehr), mit welcher du alle deine Objekte auf einem Panel,... bekommen kannst. Diese gibt dann afaik ein Object-Array zurück.

MfG Bischi

PS: Vielleicht hab ich jetzt auch Mist erzählt - in dem Fall bitte einfach ignorieren (was man mit Objekten in Java darf, und was nicht, ist mir manchmal nicht so 100% klar...)

Jana
03-07-2006, 18:37
Dieser Array funktioniert doch. :)
Ich hatte im gleichen Projekt den Code einer Klasse zur Sicherheit unter einem "falschen" Klassennamen abgespeichert, damit ich ihn gleich wieder habe.
Das waren alles Bugs und das hat offensichtlich das Projekt ruiniert.

nul
03-07-2006, 19:49
Arrays zu verwenden ist aber nicht objektorientiert wuerde jetzt unser alter Uebungsleiter sage.

mwanaheri
03-07-2006, 20:55
ist auch was dran. Arrays sind dann ok, wenn die Elementzahl genau feststeht und man ohnehin eher einen prozeduralen Stil pflegt. Schöner gehts mit collections.

Jana
04-07-2006, 15:40
Ich werd mir mal collections ansehen.
Ich lern doch erst seit einer Woche Java; :rolleyes:
und bin schon wieder auf den Bauch gefallen.

Mit JTextAreas und dem Mouselistener kann ich ja keine Informationen an ein anderes Fenster weiterleiten.
Vom Mouselistener bekomme ich ja gerade mal die x,y Koordinaten,
aber nicht welche JTextArea ich angeklickt habe.

Actionlistener und JButtons will er auf dem JPanel nicht.
Oder mache ich was falsch?
Ich habe eine Menge Felder auf die ich klicken will und er soll mir eine Zahl zurückgeben.

bischi
04-07-2006, 15:52
Mit JTextAreas und dem Mouselistener kann ich ja keine Informationen an ein anderes Fenster weiterleiten.
Vom Mouselistener bekomme ich ja gerade mal die x,y Koordinaten,
aber nicht welche JTextArea ich angeklickt habe.
Doch - mittels "event".getSource() - zumindest dann, wenn du ihnen eindeutige Namen vergeben hast (oder in deinem Fall sollte Array+nummer auch gehen).

An andere Fenster ist relativ relativ: Was verstehst du genau als anderes Fenster? Anderer Prozess? Anderer Thread? Gleicher Thread?


Actionlistener und JButtons will er auf dem JPanel nicht.
Oder mache ich was falsch?

Also JButtons gehen auf jeden Fall auf ein Panel drauf...


Ich habe eine Menge Felder auf die ich klicken will und er soll mir eine Zahl zurückgeben.
Ähm - nur mal so ne Frage am Rand: Was machst du eigentlich genau? Ich könnte mir vorstellen, dass es da eine einfachere Lösung gibt...

Mfg Bischi

PS: Erst eine Woche Java? Nischt schleschtsch....

Jana
04-07-2006, 16:24
Ich habe auf dem JPanel eine Menge Personen ca 1000+
Jetzt möchte ich auf eine Person klicken und dann in einem neuen Fenster
die Angaben (Nachname,Vorname ect) zu dieser Person verändern.
Die Zeichnung, dh. Boxen veranschaulichen den Bezug der Personen zueinander - sprich den Verwandschaftsgrad.
Das ganze soll eine Ahnentafel werden.
Aber eigentlich will ich Java lernen.

Jana
04-07-2006, 21:12
Klasse, hat geholfen! :D

bischi
05-07-2006, 13:36
Klasse, hat geholfen! :D
Immer wieder schön - wenn du jetzt noch sagst, was genau du gemacht hast ;)

MfG Bischi

Jana
05-07-2006, 15:16
Ich habe auf dem Panel eine Menge JTextArea's erzeugt.
Jede JTextArea steht für eine Person.
Person_count ist die Anzahl der Personen, die sich in der Datenbank befinden.

private JTextArea person[] = new JTextArea[10000];

for(int i=0; i<Person_count; i++){

person[i] = new JTextArea();
person[i].setBounds(xWert,yWert,Breite,Hoehe);
person[i].setBackground(new Color(r,g,b,1)); //Hintergrund transparent
person[i].setEditable(false); //Eingabe unerwünscht
person[i].setName(""+Person_id[i]); //Name ist gleich id der Person aus der Datenbank
(es geht auch mit set.Text oder append)

person[i].setForeground(new Color(r,g,b,1)); //Schrift transparent
person[i].addMouseListener(this);
person[i].setCursor(new Cursor(Cursor.HAND_CURSOR));
this.add(person[i]);
}

Jetzt habe ich mit dem Mouseevent gefragt, welche Person(Box) ich angelickt habe:

public void mouseReleased(MouseEvent evt) {

JTextArea boxname = (JTextArea)evt.getSource();
String Person_id= boxname.getName(); //System.out.println("textValue: "+Person_id);

Personendaten person_id = new Personendaten(Person_id); //Weitergeben der id der Person an das Eingabefenster
}

Eingabefenster für die Personendaten:
Konstruktor:
public Personendaten(String Personen_id)
{System.out.println("Personen_id: "+Personen_id); }

Corcovado
14-07-2006, 16:52
:eek: :eek: :eek: Ich hab den Thread nun 3x gelesen und stelle mir nun einige Fragen.. Du kennst also an die 10000 - das is ne kleinere Kreisstadt - Deiner Vorfahren mit Vor und Nachnamen, etc - ich kenn nich mal meine Eltern richtig??!!! Ich dachte das Anda_Skoa eher meinte, dass 1000 (viel) zu viel sind, als zu wenig. Warum Du das dann aufs 10fache vergroesserst verstehe ich nun nicht ganz?

Ueberlege Dir bitte mal, wenn Du 10000 Namen editierbar darstellen willst - man tippt doch immer nur an einzelnen rum und nur dafuer brauchst Du das JTextField. Evtl waere eine lazy Evaluation artige Strategie _hoechst_ anzuraten bspw gleich nen eigenen Dialog dazu - das ist OOP und das Gegenteil von alles im Array und megastatisch (und NICHT alles stattdessen in ner Liste und dynamisch, das ist weder OOP noch sonst was, das ist schlimm! Ich weiss das ich hab auch so programmiert!). Ausserdem wenn Du gleich zum Start des Prgs, den kompletten Datensatz a la "Knueppel aus dem Sack" dem Benutzer, in seiner absoluten Vollstaendigkeit an den Kopf/Bildschirm knallst, wozu dann noch die Datenbank?!

Versuche doch bspw per Listener den Namen (vllt auf nem Button, nem Treenode, etc) per Doppelklick veraenderbar zu halten, also bspw: man klickt auf einen Namen, ein Dialog geht auf (dem musst Du bspw das Parent Frame Objekt im Ctor sowieso mitgeben, brauchst also nich mal ein Event), bei klick auf etwa einen OK Button in dem Dialog kann dann eine Funktion des Parent Frames die Aenderungen per Parameter uebernehmen und in das entsprechende Label (oder was auch immer) fuer den Namen eintragen.

Was Du dabei benoetigen wuerdest waere eine einzige Klasse "NamenEditierDialog" sonste nix, die instanziierst Du nur, wenn jemand nen Namen angeklickt hat sonst nicht. Die Namen speicherst Du als _String_ in nem Container der wiederum nen entsprechenden Speichertyp fuer mehrere Strings (bspw eine Klasse Personaldaten, die die Attribute String Name und String Vorname enthaelt), also ArrayList, Collection, etc - mach Dir Gedanken, welchen Du brachst. Der Unterschied zwischen nem Array und ner liste is einfach, Array is etwas kleiner, aber statisch - wenn sich die Laenge der liste NIE aendert nimm ein Array, willst Du flexibel sein, nimm bspw die ArrayList. Halte diese immer entsprechend klein, ggbenenfalls Daten nachladen aus der DB, dafuer is die ja da!

Bspw:

class NameEditierDialog{

private JButton okbutton = new JButton();
private JFrame frame;
private JTextField tfNeuerText;

public NameEditierDialog(JFrame newFrame){
super(newFrame);

frame = newFrame;
initGUI();
}


private void initGUI(){
//button wo ein haengen, layout manager, etc
okbutton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){ok();}});
}

// ...

private void ok(){
frame.getLabel(labelIndex).setText(tfNeuerText.get Text());
}

// Klasse zu - Affe tot.


Nja, ich weiss aus vielen Erzaehlungen, die ich so im Laufe der Zeit mitbekommen habe, dass wohl die meissten Leute sich hinsetzen und in einer Woche mal schnell ein Betriebssystem schreiben. Ich bin selber leider nicht so begabt und hab fuer mein erstes groesseres (>40 Klassendateien) Java Projekt Monate gebraucht und hatte davor auch schon ein halbes Jahr Java Vorlesungen gehoert/gehabt. Danach hatte zwar haufenweise Material, Beispiel Code fuer "Wie verwende ich was" und viel gelernt, aber fuer das Programm hab ich mich schon eine Woche danach furchtbar geschaemt.. die ersten Teile sind oft alles absoluter Schrott. Erwarte bitte nicht zu viel von Dir beim ersten Prg!!! Dein Haupterfolg am Anfang ist imo die erfolgreiche "Vergroesserung des Archivs"! Sei froh, wenn Du Fehler machst und diese als solche einsiehst, denn nur so kannst Du lernen - viele machen das imo nicht.

Jana
19-07-2006, 11:48
An meinem Stammbaum arbeiten wir bereits seit einigen Generationen.
Irgendjemand aus der "Jugendgeneration" hat ihn wieder übernommen.
Es wurden schon Bücher gedruckt.
Es gibt Familientreffen mit ein paar hundert Leuten.
Keine Ahnung wie es dazu gekommen ist. Aber da viele persönliche Kontakte vorhanden sind, ist es fast wie ein Schneeballsystem. Macht Spaß!

Mein Programm darf man nicht so ernst nehmen. Ich programmiere nur ein gekauftes Programm nach. Das läuft sowieso schon.
Ich habe leider keinen, der mir Java beibringt, deshalb suche ich mir ein "Problem" um es zu lernen.

Corcovado
19-07-2006, 15:01
Is ja das beste was Du machen kannst, Kopf hoch, nicht unterkriegen lassen. Die meissten Leute haben keinen der's ihnen zeigt - aber dafuer gibts ja Foren. ;)

Schau Dir doch mal folgendes an:
http://www.galileocomputing.de/openbook/javainsel5/
Nur immer so abschnittsweise, bspw Du willst was abspeichern -> FileStreams, oder suchst was ueber Multithreading oder XML, etc. Mit der Zeit wirste die wichtigen Sachen einfach nachgelesen haben. Manches theoretische find ich darin zwar etwas oberflaechlich beschrieben, aber trotzdem besticht das Buch einfach durch die ewig vielen Beispiele und Vergleiche, und durch seine Aktualitaet - ein Praxisbuch halt und frei!!

Noch mehr Bsp Code gibts zB hier (auch wenn 1.4 etwas aelter is):
http://javaalmanac.com/

bischi
19-07-2006, 16:50
Is ja das beste was Du machen kannst, Kopf hoch, nicht unterkriegen lassen. Die meissten Leute haben keinen der's ihnen zeigt - aber dafuer gibts ja Foren. ;)
Konzepte lerns du, indem sie dir jemand beibringt. Ne Sprache lernst du nur durch viel Codeschreiben.


Schau Dir doch mal folgendes an:
http://www.galileocomputing.de/openbook/javainsel5/
Nur immer so abschnittsweise, bspw Du willst was abspeichern -> FileStreams, oder suchst was ueber Multithreading oder XML, etc. Mit der Zeit wirste die wichtigen Sachen einfach nachgelesen haben. Manches theoretische find ich darin zwar etwas oberflaechlich beschrieben, aber trotzdem besticht das Buch einfach durch die ewig vielen Beispiele und Vergleiche, und durch seine Aktualitaet - ein Praxisbuch halt und frei!!

Noch mehr Bsp Code gibts zB hier (auch wenn 1.4 etwas aelter is):
http://javaalmanac.com/

Mir gefällt persönlich das www.javabuch.de besser, da es für meinen Geschmack übersichtlicher gestaltet ist.

MfG Bischi

Jana
20-07-2006, 07:40
Vielen Dank für eure Mühe.
Manchmal - wenn man feststeckt - sind halt echte Menschen zum Reden besser als Bücher.