[Java] Applet Schieberegler Problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Toxx1n, 20. Februar 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 20. Februar 2011
    Applet Schieberegler Problem

    Hey Leute,

    habe hier ein kleines Java Programm das ein beliebiges Vieleck Zeichnet. Die Anzahl der Ecken soll mit einem Schieberegler definiert werden. Soweit funktioniert auch alles nur das ich einen erheblichen Grafikfehler im Schieberegler habe,sobald man Ihn hin und herbewegt zieht er nach. (Siehe Screenshot) Hat jemand eine Idee wie ich dies beheben kann??

    Screenshot


    Code:
    package ProjektJavaApplettKreise;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;
    
    public class projektJava extends JApplet {
     JSlider jSlider = new JSlider();
    
     public int sValue;
    
     public void init() {
     Container cp = getContentPane();
     cp.setLayout(null);
     cp.setBounds(0, 0, 500, 500);
     setSize(501, 501);
    
     jSlider.setMinimum(2);
     jSlider.setMaximum(50);
     jSlider.setValue(3);
     jSlider.setMinorTickSpacing(1);
     jSlider.setMajorTickSpacing(4);
     jSlider.setPaintTicks(true);
     jSlider.setPaintLabels(true);
     jSlider.setBounds(2, 2, 501, 60);
     sValue = jSlider.getValue();
     jSlider.addChangeListener(new ChangeListener() {
    
     public void stateChanged(ChangeEvent evt) {
     jSlider_stateChanged(evt);
     }
     });
     cp.add(jSlider);
     this.setVisible(true);
     }
     public void jSlider_stateChanged(ChangeEvent evt) {
     sValue = jSlider.getValue();
     repaint();
     }
     public void paint(Graphics g) {
     g.setColor(new Color(255, 255, 255));
     g.fillRect(0, 61, 501, 501);
     Random r = new Random();
     int punktzahl = sValue;
     g.setColor(new Color(0, 0, 0));
     double[][] arr = new double[punktzahl][2];
     double winkel = (2 * Math.PI) / punktzahl;
     for (int i = 0; i < arr.length; i++) {
     arr[i][0] = (Math.cos(i * winkel)) * 200;
     arr[i][1] = (Math.sin(i * winkel)) * 200;
     }
     int[][] x = new int[arr.length][2];
     for (int i = 0; i < arr.length; i++) {
     x[i][0] = (int) arr[i][0] + 250;
     x[i][1] = (int) arr[i][1] + 260;
     }
     for (int i = 0; i < arr.length; i++) {
     for (int j = 0; j < arr.length; j++) {
     g.setColor(new Color (r.nextInt(255), r.nextInt(255), r.nextInt(255)));
     g.drawLine(x[i][0], x[i][1], x[j][0], x[j][1]);
     }
     }
     }
    }
    
     
  2. 20. Februar 2011
    AW: Applet Schieberegler Problem

    Moin,

    rufe in der überschriebenen paint-Methode als aller erstes
    Code:
    super.paint(g);
    auf.
    Danach wird es jedoch evtl ein unangenehmes Flackern geben, weil die Hintergrundfarbe für einen kurzen Moment erscheint. Das kann man beheben indem man die Hintergrundfarbe des Containers setzt
    Code:
    cp.setBackground(new Color(255,255,255));
    Dann braucht man dies auch nicht mehr beim Zeichnen zu machen und kann die Zeilen
    Code:
    g.setColor(new Color(255, 255, 255));
    g.fillRect(0, 61, 501, 501);
    entfernen.
    Am elegantesten wäre es aber eine eigene Komponente zu schreiben, in welcher man das Zeichnen übernimmt.
    Interessant dazu ist dieser Artikel über die Delegation des Zeichnens in Java
    http://java.sun.com/products/jfc/tsc/articles/painting/
     
  3. 20. Februar 2011
    AW: Applet Schieberegler Problem

    Wogenau meinst du soll ich diese Zeilen einsetzen? Zwar habe ich keinen Grafikfehler mehr, aber es ändert sich auch die Zeichnung nicht mehr.
     
  4. 20. Februar 2011
    AW: Applet Schieberegler Problem

    Einmal in der paint Methode
    Code:
    public void paint(Graphics g) {
    [COLOR="Red"]super.paint(g);[/COLOR]
    Random r = new Random();
    ...
    
    und das Setzen der Hintergrundfarbe in der init Methode zB hier
    Code:
    public void init() {
    Container cp = getContentPane();
    cp.setLayout(null);
    cp.setBounds(0, 0, 500, 500);
    setSize(501, 501);
    [COLOR="Red"]cp.setBackground(new Color(255,255,255));[/COLOR]
    ..
    
     
  5. 20. Februar 2011
    AW: Applet Schieberegler Problem

    Danke dir, es funktioniert =)
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.