Flimmern

  • Themenstarter Themenstarter blackstarmaster
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

blackstarmaster

Gast
wieso flimmert bei diesem Programm das draw string? wegen dem repaint? wie löst man das Problem unkompliziert?


import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Test extends Applet{

private TextField tf_a;

public void init () {
setLayout (new FlowLayout());
tf_a = new TextField("was willst du eingeben",20);
add(tf_a);
}

public String eingabe (String k){
String a = tf_a.getText();
return a;
}

public void paint( Graphics g ) {
String k="";
String w = eingabe(k);
g.drawString( "folgendes hast du eingegeben: "+w, 100, 100 );
repaint();
}
}
 
und mal drüber nachdenken ob man das ganze nicht auch eleganter lösen kann 😉

Code:
import java.awt.FlowLayout;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test extends JApplet implements CaretListener {

    private JTextField tf_a;
    private JLabel textLabel;

    @Override
    public void init() {

        setLayout(new FlowLayout());
        tf_a = new JTextField("was willst du eingeben", 20);
        textLabel = new JLabel("folgendes hast du eingegeben: ");
        tf_a.addCaretListener(this);
        add(tf_a);
        add(textLabel);
    }

    @Override
    public void caretUpdate(CaretEvent ce) {
        textLabel.setText(tf_a.getText());
    }
}
 
ok aba wos muss ich tun, wenn ich das ganz mit g.drawString machen will?
das repaunt muss ich stehen lassen, damit sich der Text erneuert!!!
 
ok aba wos muss ich tun, wenn ich das ganz mit g.drawString machen will?
das repaunt muss ich stehen lassen, damit sich der Text erneuert!!!

Klar geht das, macht aber keinen besonderen Sinn (was besonders negativ daran ist wird dir auffallen, wenn du den Text im TextField mal löschst und dann was neues reinschreibst 😉). Die von mir gepostete Art und Weise ist hier der way to go.

Code:
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test extends JApplet implements CaretListener {

    private JTextField tf_a;
   // private JLabel textLabel;

    @Override
    public void init() {
        setLayout(new FlowLayout());
        tf_a = new JTextField("was willst du eingeben", 20);
        //textLabel = new JLabel("folgendes hast du eingegeben: ");
        tf_a.addCaretListener(this);
        add(tf_a);
       // add(textLabel);
    }

    @Override
    public void paint(Graphics g) {
     g.drawString( "folgendes hast du eingegeben: "+tf_a.getText(), 100, 100 );
    }
    
    @Override
    public void caretUpdate(CaretEvent ce) {
        //textLabel.setText(tf_a.getText());
        repaint();
    }
}
 
Da muss ich jetzt aber einhaken: Quaxlis Antwort sollte NICHT implizieren, dass die paint-Methode so in Ordnung ist. (Das ist sie nämlich definitiv NICHT).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben