for-Schleife in paint()

Armalyte

Grünschnabel
Hallo,

habe ein merkwürdiges Problem, dessen Lösung ich einfach nicht finde, so daß ich hoffe, hier kann mir jemand helfen.

Und zwar wird folgender Code anstandslos compiliert (beide Versionen), doch bei dem Teil mit der for-Schleife wird im Fenster nichts angezeigt.

public void paint(Graphics g) {
int i = 2;
g.drawRect(10, (8+i*25), 60, 20);
g.drawString("Thread "+i, 15, (22+i*25));
}

public void paint(Graphics g) {
for (int i = 0; i < this.threads; i++){
g.drawRect(10, (8+i*25), 60, 20);
g.drawString("Thread "+i, 15, (22+i*25));
}
}

threads ist eine int Variable, die der Klasse übergeben wird, in Zukunft soll mal ein array übergeben werden
der Konstruktor sieht so aus:

public class Monitor extends Canvas {

// Deklarationen

private Image image;
private int height;
private int width;
private int threads;
public Graphics g;

public Monitor(int threads){
this.threads = threads;
width = (int)EinfachesGUI.anzeige.getBounds().getWidth();
height = (int)EinfachesGUI.anzeige.getBounds().getHeight();
setSize( width, height );
}

Wahrscheinlich ist es ein Anfängerfehler, trotzdem würde ich mich über Hilfe sehr freuen.

Armalyte
 
Original geschrieben von Armalyte
Hallo,

habe ein merkwürdiges Problem, dessen Lösung ich einfach nicht finde, so daß ich hoffe, hier kann mir jemand helfen.

Und zwar wird folgender Code anstandslos compiliert (beide Versionen), doch bei dem Teil mit der for-Schleife wird im Fenster nichts angezeigt.

public void paint(Graphics g) {
int i = 2;
g.drawRect(10, (8+i*25), 60, 20);
g.drawString("Thread "+i, 15, (22+i*25));
}

public void paint(Graphics g) {
for (int i = 0; i < this.threads; i++){
g.drawRect(10, (8+i*25), 60, 20);
g.drawString("Thread "+i, 15, (22+i*25));
}
}

threads ist eine int Variable, die der Klasse übergeben wird, in Zukunft soll mal ein array übergeben werden
der Konstruktor sieht so aus:

public class Monitor extends Canvas {

// Deklarationen

private Image image;
private int height;
private int width;
private int threads;
public Graphics g;

public Monitor(int threads){
this.threads = threads;
width = (int)EinfachesGUI.anzeige.getBounds().getWidth();
height = (int)EinfachesGUI.anzeige.getBounds().getHeight();
setSize( width, height );
}

Wahrscheinlich ist es ein Anfängerfehler, trotzdem würde ich mich über Hilfe sehr freuen.

Armalyte

Habe mal eben Deinen Code hier bei mir eingefügt und ausprobiert, geht doch einwandfrei. Bist Du sicher, dass Du auch an einer relevanten Stelle
Monitor monitor = new Monitor (5);
oder sowas in der Art aufrufst und diesen dann einem Frame o.ä. hinzufügst?
 
Also aufgerufen wird das ganze in einer anderen Klasse und zwar auf den Klick auf einen Button hin:

public void ButtonAction( ActionEvent e ) {
JButton button = (JButton)e.getSource();
if ( button.equals( startButton )) {
threadMonitor = new Monitor( threadChoice.getSelectedIndex());
EinfachesGUI.anzeige.add(threadMonitor, BorderLayout.CENTER);
EinfachesGUI.anzeige.validate();
}
if ( button.equals( backButton )) {
EinfachesGUI.cards.show(EinfachesGUI.navigation, "eins");
EinfachesGUI.anzeige.remove(threadMonitor);
EinfachesGUI.navigation.validate();
EinfachesGUI.anzeige.validate();
}
}

threadMonitor ist am Anfang der Klasse deklariert:
public static Monitor threadMonitor;

Aber danke für den Tip!
Es liegt tatsächlich an dem übergebenen Parameter. Jetzt muss ich nur noch herausfinden, warum
threadChoice.getSelectedIndex()
nicht den in der Choice aktuell angezeigten Wert liefert.

Vielen Dank nochmal!
 
ups

habe gerade meinen Denkfehler erkannt:
habe Index mit dem Wert der an der Stelle (Index) steht verwechselt, so daß, wenn das erste ausgesucht war, ja der Index 0 ist, und dementsprechend natürlich nichts gezeichnet wurde

...wie dumm

da hätte ich wohl sowas wie
int i = string.valueOf(getSelectedItem());
machen sollen

nochmals danke für den Hinweis, es war gestern abend wohl schon etwas zu spät ;-)
 

Neue Beiträge

Zurück