JButton und Aktion...

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

JButton und Aktion…
Tag Leute!

Also ich hab mich grad ans neue Blatt gemacht…

Frage:

Ich habe einen JButton b.

Wie lege ich desen Aktion fest wenn er gedrückt wird??

er soll ja JList.setSelectedIndex() ausführen…

mfg

mumu


Für den einen Button [m]button[/m] so:

button.addActionListener( new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        ...
    }
});

Und für eine JList [m]list[/m] so:

list.addListSelectionListener( new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        ...
    }
});

Flo


danke!

den für jlist hatte ich schon aber naja…funktioniert jetzt auf jeden fall!

mfg

mumu


Hab ich mir schon gedacht, aber nachdem sich die Frage wohl noch mehr stellen werden, hab ich halt mal beides hingeschrieben.
Prinzipiell müsste man auch andere Listener nehmen können, steht ja z.B. nicht da ob die Liste nur auf anklicken reagieren soll oder auch mit der Tastatur bedienbar sein soll…

Flo


Ich hätte noch eine ganz andere Frage zu der ganzen GUI-Geschichte in Java:

Es schaut doch so aus, dass ich in der main() nicht warte, bis das Fenster, das ich erstellt habe, geschlossen wird. Der Haupt-Thread (wenn er’s denn ist) müsste also nach der main()-Ausführung beendet sein.

Funktioniert Java jetzt so, dass es generell wartet, bis alle Threads beendet sind, oder steckt da irgendein anderer Mechanismus dahinter?


Wie das mit den Threads genau funktioniert, kann ich nicht sagen. Aber durch empirisches Rumprobieren habe ich festgestellt, dass man das Programm explizit beenden muss, sobald das Fenster geschlossen wird.


Dem muss ich beipflichten. Also man muss die Konstruktion einbauen, die auch so im Beispiel in der Vorlesung vorkam und die man im Skript auf Seite 40 findet.


Die einfachste Konstruktion um zu erreichen, dass ein Fenster dass Programm terminiert wenn es geschlossen wird ist

JFrame frame = new JFrame("Let's Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

wenn ihr den JFrame extra erzeugt, und

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

wenn eure ganze Klasse von JFrame abgeleitet ist!


Das ist natürlich noch mal eine Stufe eleganter. Danke für den Tipp!


IIRC wird die Eventloop geforkt, die sich erst beendet wenn keine Listener mehr da sind. Und natürlich wartet Java bis alle Vordergrund-Threads fertig sind.
Mit System.exit() werden übrigens gleich alle gekillt.

Eigentlich wärs sowieso an der Zeit das man uns über Threads
aufklärt. Tut das am besten schonmal selbst, denn es sieht nicht
so aus als ob das in nächster Zeit geschieht. http://de.wikipedia.org/wiki/Thread


Hätt mich auch fast gewundert, wenn der Andy das nicht gewusste hätte… :wink:

(…und irgendwie war meine Frage doch ziemlich dämlich formuliert, jetzt wo ich sie mir nochmal durchlese…)


Hehe. :>
Die Testcases scheinen diesmal übrigens ziemlich lasch zu sein.
Speziell die GUI-Anwendung ist natürlich schlecht zum testen.


Sagt mal, muss man den button static final machen oder gibts ne elegantere methode die farbe von der anonymen internen klasse aus zu ändern?


static final muss nicht sein – es kann ja eine Variable in der aktuellen Methode sein. Ich wüsste aber nicht, wie’s ohne final gehen könnte… Und so un-elegant find ich das eigentlich nicht…

Listener

[quote=TheFlow:1132856665]
… für eine JList [m]list[/m] so:

list.addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { ... } }); [/quote]

Genau so hab ich’s gemacht, dennoch sagt mir eclipse, dass [m]ListSelectionListener[/m] nicht in einen Typ aufgelöst werden kann.

Woran kann das liegen?


Dazu musst du die ListSelectionListener Klasse (oder allternativ auch das ganze Paket, in dem sie sich befindet) importieren:
import javax.swing.event.ListSelectionListener;

In Eclipse wählst du einfach jedes mal, wenn die Meldung mit dem nicht aufgelösten Typ kommt unter “Source” “Organize Imports” aus und fertig :wink:


Ganz schön praktisch, mit dem Imports Organizing! Danke, das war der entscheidende Hinweis! 100% :wink: (nicht nur im Testcase, auch in der Funktionalität!)


wie bekomm ich den die farbnamen her? ich find nichts in der java api bei java.awt.color… ich darf die ja nicht per hand in meine liste eingeben oder? die mussen schon von der *.color importiert werden?

thx

MC


Theoretisch müsste es gehen die Farbnamen aus Color abzufragen (über ein Field). Aber mit dem Wissenstand aus der Vorlesung können sie das eigentlich nicht verlangen. Also ich hab sie der JList einfach als String-Array übergeben…