Applet, Funktion zeichnen

Bitte um Hilfe

Aufgabe:
Funktion 1: Das Applet erlaubt, in einem festen Rechteck graue Gitterlinien zu zeichnen. Die Maschenweite des Gitters und die Dicke der Gitterlinien lassen sich je durch einen Schie- beregler einstellen. (Vgl. Render-Funktionen in Pixelgraphikprogrammen.)

KOMME NICHT MEHR WEITER, bin absouluter Neuling

Zur Zeit:

    import java.awt.Graphics;
    import java.awt.Scrollbar;
    import java.awt.event.AdjustmentEvent;
    import java.awt.event.AdjustmentListener;
    import java.awt.Color; 
    
    
    public class AUFGABE__3 extends Applet {
     
            Scrollbar dicke_slider = new Scrollbar(Scrollbar.HORIZONTAL);
            Scrollbar weite_slider = new Scrollbar(Scrollbar.VERTICAL);
            int weite = 10;
            int dicke = 10;
           
            @Override
            public void init() {
                    dicke_slider.setMinimum(1); // kleinster wert auf dem slider
                    dicke_slider.setMaximum(20); // groesster wert auf dem slider
                    dicke_slider.setValue(10); // start wert des sliders
                    dicke_slider.setVisibleAmount(1); // breite des reglers
     
                    this.add(dicke_slider); // slider zum applet hinzufuegen
     
                   weite_slider.setMinimum(1);
                   weite_slider.setMaximum(20);
                   weite_slider.setValue(10);
                   weite_slider.setVisibleAmount(1);
                    
                    this.add(weite_slider);
                    
                    WeiteAdjustmentListener weite_listener = new WeiteAdjustmentListener();
                    weite_slider.addAjustmentListener(weite_listener);
                    
                    DickeAdjustementListener dicke_listener = new DickeAdjustementListener();
                    dicke_slider.addAdjustmentListener(dicke_listener); // listener bei slider registrieren
     
                    super.init(); // initialisieren der elternklasse (unwichtig)
            }
     
     
            // innere Klasse fuer den Listener des dicke_slider
            class DickeAdjustementListener implements AdjustmentListener {
            	
            
                    @Override
                    public void adjustmentValueChanged(AdjustmentEvent e) {
                            // wenn gerade eingestellt wird
                            if(e.getValueIsAdjusting()){
                                    System.out.println("adjusting thickness...");
                            } else {
                                    dicke = e.getValue();
                                    System.out.println(dicke);
                                    repaint();
                            }
                    }
                    
                    class WeiteAdustmentListener implements AdjustmentListener {
                    	
                    	
                    	public void adjustmentValueChanged(AdjustmentEvent e){
                    		
                    		if(e.getValueIsAdjusting()){
                                System.out.println("adjusting width...");
                        } else {
                                weite = e.getValue();
                                System.out.println(weite);
                                repaint();
                    	}
                    }
            }
            
            @Override
        public void paint (Graphics g) {
                System.out.println("painting...");
               
                int x_0 = 50;
                int y_0 = 150;
                int breite = 500;
                int hoehe = 500;
                // rechteck zeichnen
                g.drawRect(x_0, y_0, breite, hoehe);
               
                // farbe aendern
                Color backupColor = g.getColor();
                g.setColor(Color.GRAY);
               
                // gitter zeichnen
                int y = y_0;
                int linienAnzahl = calculateNumberOfLines(hoehe);
                for(int i = 0; i < linienAnzahl; i++){
                        g.fillRect(x_0 , y, breite, dicke);
                        // y fuer naechste linie erhoehen
                        y = y + dicke + weite;
                }
               
                // farbe zurueck setzen
                g.setColor(backupColor);
                // alles andere zeichnen lassen (z.B. den slider)
                super.paint(g);
        }
       
        int calculateNumberOfLines(int space){
                // berechnet anzahl der moeglichen linien im gegebenen platz
                // pro linie braucht man (dicke + weite) platz.
                return (space / (dicke + weite));
        }
           
            
            
            
            }
     
    }```
    import java.awt.Graphics;
    import java.awt.Scrollbar;
    import java.awt.event.AdjustmentEvent;
    import java.awt.event.AdjustmentListener;
    import java.awt.Color; 
    
    
    public class AUFGABE__3 extends Applet {
     
            Scrollbar dicke_slider = new Scrollbar(Scrollbar.HORIZONTAL);
            Scrollbar weite_slider = new Scrollbar(Scrollbar.VERTICAL);
            int weite = 10;
            int dicke = 10;
           
            @Override
            public void init() {
                    dicke_slider.setMinimum(1); // kleinster wert auf dem slider
                    dicke_slider.setMaximum(20); // groesster wert auf dem slider
                    dicke_slider.setValue(10); // start wert des sliders
                    dicke_slider.setVisibleAmount(1); // breite des reglers
     
                    this.add(dicke_slider); // slider zum applet hinzufuegen
     
                   weite_slider.setMinimum(1);
                   weite_slider.setMaximum(20);
                   weite_slider.setValue(10);
                   weite_slider.setVisibleAmount(1);
                    
                    this.add(weite_slider);
                    
                    WeiteAdjustmentListener weite_listener = new WeiteAdjustmentListener();
                    weite_slider.addAjustmentListener(weite_listener);
                    
                    DickeAdjustementListener dicke_listener = new DickeAdjustementListener();
                    dicke_slider.addAdjustmentListener(dicke_listener); // listener bei slider registrieren
     
                    super.init(); // initialisieren der elternklasse (unwichtig)
            }
     
     
            // innere Klasse fuer den Listener des dicke_slider
            class DickeAdjustementListener implements AdjustmentListener {
            	
            
                    @Override
                    public void adjustmentValueChanged(AdjustmentEvent e) {
                            // wenn gerade eingestellt wird
                            if(e.getValueIsAdjusting()){
                                    System.out.println("adjusting thickness...");
                            } else {
                                    dicke = e.getValue();
                                    System.out.println(dicke);
                                    repaint();
                            }
                    }
                    
                    class WeiteAdustmentListener implements AdjustmentListener {
                    	
                    	
                    	public void adjustmentValueChanged(AdjustmentEvent e){
                    		
                    		if(e.getValueIsAdjusting()){
                                System.out.println("adjusting width...");
                        } else {
                                weite = e.getValue();
                                System.out.println(weite);
                                repaint();
                    	}
                    }
            }
            
            @Override
        public void paint (Graphics g) {
                System.out.println("painting...");
               
                int x_0 = 50;
                int y_0 = 150;
                int breite = 500;
                int hoehe = 500;
                // rechteck zeichnen
                g.drawRect(x_0, y_0, breite, hoehe);
               
                // farbe aendern
                Color backupColor = g.getColor();
                g.setColor(Color.GRAY);
               
                // gitter zeichnen
                int y = y_0;
                int linienAnzahl = calculateNumberOfLines(hoehe);
                for(int i = 0; i < linienAnzahl; i++){
                        g.fillRect(x_0 , y, breite, dicke);
                        // y fuer naechste linie erhoehen
                        y = y + dicke + weite;
                }
               
                // farbe zurueck setzen
                g.setColor(backupColor);
                // alles andere zeichnen lassen (z.B. den slider)
                super.paint(g);
        }
       
        int calculateNumberOfLines(int space){
                // berechnet anzahl der moeglichen linien im gegebenen platz
                // pro linie braucht man (dicke + weite) platz.
                return (space / (dicke + weite));
        }
           
            
            
            
            }
     
    }```

Und wo genau hakts? Hast du konkrete Fragen?

Es funktioniert nicht
Und ich weiss nicht wie ichs beheben soll

*** Edit ***

Wie muss ich den Code ändern das es der Aufgabe entspricht??

Du solltest den Code vllt. mal in eine IDE wie z.B. Eclipse einfügen.
WeitedAjusmentListener ist z.B. eine innere Klasse von DickeAdjustmentListener und dann existieren noch einige Schreibfehler.

BTW.: Sorg’ mal dafür, dass ich (oder andere Mods nicht ständig doppelte Beiträge von dir löschen müssen (->Editierfunktion). Danke.

WAS MUSS ICH JETZ ZUR ERFÜLLUNG DER AUFGABE MACHEN??
WELCHE ÄNDERUNGEN,WELCHE HINZUFÜGUNGEN??
AM BESTEN EINE NOOBANLEITUNG

  1. Es fehlt eine geschweifte Klammer zu in Zeile 57, dafür ist die in Zeile 114 zu viel
  2. Da sind Schreibfehler in den Zeilen 33 und 58

Schon rate ich ein bisschen:

graue Gitterlinien zu zeichnen. Die Maschenweite des Gitters und die Dicke der Gitterlinien lassen sich je durch einen Schie- beregler einstellen.

Gitterlinien == bestimmte Maschenweite
Maschenweite == bestimmter Schieberegler
Schieberegeler != JScrollPane

Du musst bei einem Klick inm Applet/(J)Frame/(J)Panel/Canvas/etc. noch ermitteln/feststellen, um welche Linie (horizontal und vertikal) es sich handelt.

Auch zu überlegen wäre, ob für jede Linie ein eigenes(,) anderes Objekt.

Edit: Oder ist die Aufgabe so zu verstehen, ein komplettes Gitternetz (in Grau) zu zeichnen, mit bestimmtem/festem Abstand? Dann frage IIICH mich aber nach dem Zweck…

Ich hab’ da mal 'was, was du in ein Applet übertragen könntest:

Img…
[spoiler][/spoiler]

Source…
[spoiler]```/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package javaapplication1;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**

  • @author CB
    */
    public class Raster {

    private JFrame fra = new JFrame(“Raster”);
    private JPanel pnl = new JPanel(new GridLayout(3, 1));
    private Canvas can = new Canvas() {
    @Override
    public void paint(Graphics g) {
    int h = sliH.getValue() + 1;
    int v = sliV.getValue() + 1;
    for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
    g.drawRect(i * (h + 0) + 0, j * (v + 0) + 0, h, v);
    }
    }
    can.setPreferredSize(new Dimension(100 * (h + 0) + 0, 100 * (v + 0) + 0));
    }
    };
    private JScrollPane pan = new JScrollPane(can);
    private JSlider sliH = new JSlider(1, 100, 15);
    private JSlider sliV = new JSlider(1, 100, 15);

    public Raster() {
    fra.add(pnl);
    pnl.add(pan);
    pnl.add(sliH);
    pnl.add(sliV);

     sliH.setPaintLabels(true);
     sliH.setPaintTicks(true);
     sliH.setPaintTrack(true);
     sliH.setSnapToTicks(true);
    
     sliH.addChangeListener(new ChangeListener() {
         @Override
         public void stateChanged(ChangeEvent e) {
             update();
         }
     });
     sliV.addChangeListener(new ChangeListener() {
         @Override
         public void stateChanged(ChangeEvent e) {
             update();
         }
     });
    
     update();
     //fra.setSize(640, 480);
     fra.pack();
     //fra.setSize(640, 480);
     fra.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
     fra.setVisible(true);
    

    }

    private void update() {
    SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
    can.repaint();
    //pan.repaint();
    }
    });
    }

    public static void main(String[] args) {
    new Raster();
    }
    }```[/spoiler]

Probs…
[spoiler]Ich kenne mich mit Viewport von JScrollPane nicht aus, anscheinend wird nicht neuberechnet, wenn sich die Größe des Viewports ändert, sondern nur dann, wenn sich Größe JFrame ändert.

Der Inhalt des Rectangles beträgt bei mir mindestens 1 Pixel - bei (0 0) wird angefangen, zu zeichnen.

Programmlogik im Konstruktor. :/[/spoiler]

Ist das Thema damit gelöst?

Und so generell für die Zukunft: bei der Formatierung ist weniger mehr. Texte in größerer Schrift zu verfassen ist nicht notwendig und wirkt auch imho eher Kontraproduktiv. Genauso wie einen Beitrag nur in Großbuchstaben zu verfassen.

Desweiteren wäre da in Zukunft mehr Information deinerseits schön: “Es geht nicht” ist keine Fehlerbeschreibung. Du musst deinen Code ja getestet haben und entweder ist das Ergebnis nicht dem Soll-Zustand oder du hast Fehlermeldungen. Beides solltest du nicht verheimlichen, da es uns sonst schwierig wird dir zu helfen.