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));
}
}
}```
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.
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…
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.
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.