PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: Blödes Problem mit Color!



Lin728
25-06-2003, 19:04
Der folgende Code sollte die Schrift eines JButtons von Gelb langsam Rot werden lassen, nur leider Funktioniert das nicht. Der Button ist zuerst Gelb und wird erst nachdem die Schleife beendet worde ist auf knallrot gesetzt. Die Nuancen werden erst gar nicht angezeigt.
Ich habe schon alles Probiert, im selben Thread, in einem eigenem Thread, ja sogar mit yield und repaint.



for(int i=0; i<11; i++)
{
jb.setForeground(new Color(255,(int) i*25.5, 0));
jb.repaint();
Thread.yield();

try
{
Thread.sleep(10);
}catch(InterruptedException ex){}


Mfg

anda_skoa
25-06-2003, 19:31
Läuft die Schleife in einem extra Thread?

Oder blockierst du die Eventloop und wunderst dich warum sie dann nicht arbeitet ;)

Ciao,
_

Lin728
25-06-2003, 20:17
Hab run() vom Interface direkt gestartet statt über den Umweg über Thread ;-)


Mfg

anda_skoa
25-06-2003, 20:47
Original geschrieben von ceisserer
Noch ne Frage: Wenn die Methoden im Thread abgerbeitet sind, beendet er sich dann von selbst?


Wenn er dann aus run() rausspringt, ja.

Ciao,
_

bischi
26-06-2003, 06:47
Noch ne andere Frage:

Haste nicht ne Klammer vergessen?

jb.setForeground(new Color(255,(int)( i*25.5), 0));

MfG Bischi

Lin728
26-06-2003, 11:51
Ja, aber da hätte der Compilier eh gemotzt. Da hab ich was geändert und ohne Probieren einfach reinkopiert...

Danke für eure Hilfe!

peschmae
26-06-2003, 12:06
Original geschrieben von anda_skoa
Läuft die Schleife in einem extra Thread?

Oder blockierst du die Eventloop und wunderst dich warum sie dann nicht arbeitet ;)


das ist egal, da in Java/Swing der Eventloop immer automatisch in einem eigenenen Thread läuft

Zitat aus Thinking in Java:


It is easy to forget that you are using threads when you program with Swing. The fact that you don’t have to explicitly create a Thread object means that threading issues can catch you by surprise. Typically, when you write a Swing program, or any GUI application with a windowed display, the majority of the application is event driven, and nothing really happens until the user generates and event by clicking on a GUI component with the mouse, or striking a key. Feedback

Just remember that there is a Swing event dispatching thread, which is always there, handling all the Swing events in turn. This needs to be considered if you want to guarantee that your application won’t suffer from deadlocking or race conditions. Feedback

This section looks at a couple of issues worth noting when working with threads under Swing.


ist wohl praktisch kann aber auch probleme machen :) und anda_skoas verwirren :D - und das ist wohl einigen aufwand wert :p

MfG Peschmä

anda_skoa
26-06-2003, 15:59
Original geschrieben von peschmae
das ist egal, da in Java/Swing der Eventloop immer automatisch in einem eigenenen Thread läuft


Ok, ändert aber nichts an den Tatsachen.

Wenn du diesen Thread blockierst, kann er nichts mehr anderes machen.

ich glaube kaum, das SWING für jedes Event einen eigenen Thread startet.



ist wohl praktisch kann aber auch probleme machen :) und anda_skoas verwirren :D - und das ist wohl einigen aufwand wert :p


Der Hauptthread lebt meistens ohnehin nicht lange.
Der läuft in fast allen Java GUI Applikationen die ich kennen, mehr oder weniger nur durch main() durch.
Ihn irgendwo warten zu lassen zahlt sich nicht aus, wenn man einen zweiten Thread braucht, startet man einfach noch einen.

Ciao,
_

Lin728
26-06-2003, 20:40
anda_skoa beats them all ;-)

Lin728
26-06-2003, 20:41
Kennt wer eine Möglichkeit JFrames per api zu maximieren.
Hab da nämlich leider nix gefunden ;-(


Mfg

peschmae
27-06-2003, 07:26
afaik ist


frame.setSize(Toolkit.getDefaultToolkit().getScree nSize());

die einzige Möglichkeit, die erst noch nicht "richtig" maximiert

MfG Peschmä

Lin728
27-06-2003, 07:58
Bis jetzt hab ich meine Fenster so maximiert, wie du es mir vorgeschlagen hast, leider hatte ich das Problem, das diese Vorgehensweise platformspezifische Sachen wie Taskbar erst gar nicht beachtet.

Es muss doch irgendeine Methode geben, die maximieren kann.....

Mfg

bischi
27-06-2003, 12:17
Wie wärs mit sowas:

frame.setSize( frame.getMaximizedBounds() )

MfG Bischi

PS: Keine Ahung obs funktioniert, musst wahrscheinlich noch das Rectangle, das getMaximizedBound zurückgibt in int umwandeln

Lin728
27-06-2003, 13:03
So wies aussieht ist die Methode getMaximizedBounds nur ein Mittel um herauszufinden, ob vorher schon einmal mit setMaximizedBounds gesetzt wurde und wie groß das ist....

Ich habs probiert und ich bekomm nur null zurück, so stehts auch in den ApiDocs ("may be null")... ;-(

Schade...

Mfg

PS: Danke für deine Mühe!

anda_skoa
27-06-2003, 15:20
Hmm.

java.awt.GraphicsConfiguration getBounds() vielleicht.

Ciao,
_