JSlider korrekt implementieren

feldmarv

Mitglied
Hallo Zusammen


Ich habe einen JSlider erstellt. Er soll wenn ich eine Linie auf meinem Zeichnungspanel zeichne die Strichdicke einstellen lassen.
Meiner Meinung nach soll aber die Linie so bestehen wie sie gezeichnet wurde. Wenn also der Slider auf 5 Px gestellt und ich eine Linie zeiche soll diese 5 Px breit werden. Wenn ich nun den Slider auf 8 Px stelle soll sie mit 5 Px erhalten bleiben und nicht auf 8 Px. wechseln.
Wie erreiche ich das? Im Moment wechseln alle gezeichneten Objekte immer auf die Zahl im Slider. Ich kann also keine Linien mit verschiedenen Strichdicken zeichnen. =(

Vielen Dank für die Hilfe.

Java:
		Graphics2D g2 = ( Graphics2D )g;				// Dicke der Linie soll mit JSlider bestimmt werden
		g2.setStroke(new BasicStroke(Gui.dicke));
		g.drawLine(x, y, x2, y2);

Java:
public class MyChangeAction implements ChangeListener{
		public void stateChanged(ChangeEvent ce){
				dicke = slider.getValue();
				
			}

Java:
		slider.setValue(2);
		slider.addChangeListener(new MyChangeAction());
		slider.setMinimum(0); //Minimalwert ist Null
        slider.setMaximum(10);
        slider.setMajorTickSpacing(1); //Große Striche (mit Zahl) in 10er Schritten
        slider.setPaintTicks(true); //Striche werden angezeigt
        slider.setPaintLabels(true); //Anzeige der Zahlen true
        slider.setPaintTrack(true); //Balken wird angezeigt
        slider.setSnapToTicks(true); //automatisches Versetzen
 
Zuletzt bearbeitet:
G

Gassst

Gast
Vielen Dank für die Antwort, aber können Sie das mir etwas ausführlicher Erklären. Bin noch etwas zu Neu in Java.

Du willst mehrere Linien zeichen, jede Linie soll eine eigene Strichstärke haben. Wo speicherst du die Strichstärke für jede Linie, wo speicherst du die Koordinaten für jede Linie? (Rhetorische Frage)
 

feldmarv

Mitglied
Du willst mehrere Linien zeichen, jede Linie soll eine eigene Strichstärke haben. Wo speicherst du die Strichstärke für jede Linie, wo speicherst du die Koordinaten für jede Linie? (Rhetorische Frage)

Die Strichstärken werden im Moment nirgends gespeichert. Genau das ist mein Problem. Ich weiss nicht genau wie ich das lösen soll.

Die Koordinaten der Linie werden in einer ArrayList gespeichert.
 

feldmarv

Mitglied
Die x,y Koordinaten werden in einer Variable <objekte> gespeichert, eine Arraylist.

aber wie kann ich nun die Dicke und später auch noch die Farbe des Objekt auch noch irgendwo speichern?

Vielen Dank für die Hilfe.
 

Marco13

Top Contributor
Ganz pragmatisch:
Java:
class TheClass
{
    private List<Shape> shapes = ...
    private List<Stroke> strokes = ... // NEU

    public void addToPaint(Shape shape, Stroke stroke)
    {
        shapes.add(shape);
        strokes.add(stroke);
    }

    public void paint(...)
    {
         for (int i=0; i<shapes.size(); i++)
         {
             Shape shape = shapes.get(i);
             Stroke stroke = strokes.get(i);
             g.setStroke(stroke);
             g.draw(shape);
         }
    }

Wenn da noch mehr dazukommt (z.B. noch Farbe oder sonstwas) kann man sich was geschickteres basteln, z.B. eine kleine Klasse wie
Java:
class Zeichenaufgabe
{
    private Shape shape;
    private Stroke stroke;
    private Color color;
    
....
    public void führeAus(Graphics2D g)
    {
    ....
    }
aber das muss man sich genauer überlegen.

EDIT: Und wichtig: Hör auf, die Leute hier mit "SIE" anzureden :autsch: :noe: ;)
 

feldmarv

Mitglied
Vielen Dank für den ersten Input.
Versuche diesen noch zu implementieren. Mein Fehler: der JSlider der die Strichdicke einstellen lässt gibt einen Wert als Integer. Ich benötige aber den Typ "Stroke".

(Type mismatch: cannot convert from int to Stroke)
 

r.w.

Bekanntes Mitglied
Vielen Dank für den ersten Input.
Versuche diesen noch zu implementieren. Mein Fehler: der JSlider der die Strichdicke einstellen lässt gibt einen Wert als Integer. Ich benötige aber den Typ "Stroke".

(Type mismatch: cannot convert from int to Stroke)

Versuch es mal in etwa so:
Java:
   BasicStroke b = new BasicStroke((float)slider.getValue());
:)

VG ROlf
 

feldmarv

Mitglied
Vielen Dank. Ich versuchte es mal mit der float und dem Basicstroke. Aber nun kann ich nichts mehr zeichnen auf dem Zeichnungspanel. ???:L
Darum poste ich einmal die Painter.java. Diese Klasse sollte die gezeichneten Objekte und die Strichdicken speichern und immer wieder neu zeichnen.

Java:
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.List;
import java.awt.Stroke;
import java.util.ArrayList;
import javax.swing.JPanel;


public class Painter extends Thread{									 // Painter für Nebenaktivität -> repaint graphics objekt immer neu holen und neu zeichnen
																		// Thread ist die Nebenaktivität
	

	private JPanel fenster;
	private ArrayList<Vector> objekte; 									// Liste von Vektoren dynamisch
	private ArrayList<BasicStroke> strokes; 							// Liste mit den Strichdicken
	
	public Painter(JPanel f){
		fenster = f;
		objekte = new ArrayList<Vector>();
		strokes = new ArrayList<BasicStroke>();
	}
	
	public void addToPaint(BasicStroke stroke){
		Gui.b = stroke;
		strokes.add(stroke);
    }
	
	public void run() {
		while(true){
			try{
			Graphics g = fenster.getGraphics();
			g.clearRect(0, 0, fenster.getWidth(), fenster.getHeight());
			for(int i=0; i<objekte.size(); i++){ 						// alle gezeichnete Objekte durchgehen
				Vector v = objekte.get(i);								// hole aus Liste Element an Position i
				BasicStroke stroke = strokes.get(i);


				((Graphics2D) g).setStroke(stroke);
				v.Paint(g); 											
			}}
			catch(Exception e){}
			try {
				Thread.currentThread();
				Thread.sleep(1000/24);
			} catch (InterruptedException e) {
				e.printStackTrace();

				
			} // 1000/24 24 tausendstel sekunden bis warten... Zahl aus Flashprogrammierung
		}		
	}
	
	public void addVector(Vector v){
		objekte.add(v);
		
	}
	
	public void clearVector(){
		objekte.clear();
	}
	

}

In der Gui.java Klasse ist der Listener der den JSlider abfangen soll.
Java:
	public class MyChangeAction implements ChangeListener{
		public void stateChanged(ChangeEvent ce){
			BasicStroke b = new BasicStroke((float)slider.getValue());
			//System.out.println(b);
			}
		}
 
Zuletzt bearbeitet:

feldmarv

Mitglied
fenster.getGraphics und dieser eigene Thread sind ohnehin Bogus. Faustegel: NIE auf einer Component getGraphics aufrufen. Alles, was gezeichnet wird, muss von der paintComponent aus gezeichnet werden.

Mehr dazu steht in Malen in Swing Teil 1: der grundlegende Mechanismus ? Byte-Welt Wiki , und Malen in Swing Teil 2: ein einfaches Malprogramm ? Byte-Welt Wiki könnte auch gut zu deinem Vorhaben passen.


Die Lösung mit dem Thread hat aber bisanhin gar nicht gestört. Nein es hat wunderbar geklappt.
Aber als ich nun BasicStroke implementieren wollte. Wird gar nichts mer gemacht.? ;(
 

feldmarv

Mitglied
Ich wäre sehr froh um weitere Informationen. Denn ich möchte an meinem Projekt weiterarbeiten, stehe jedoch voll an.

Ich muss einfach den Wert des JSliders in die ArrayList<BasicStroke> weitergeben können und danach das ganze immer mit den Vectordaten der Linie neu zeichnen lassen. Aber mit meinem Java Anfängerwissen komm ich da irgendwie nicht weiter.
 
G

Gasst

Gast
Ich muss einfach den Wert des JSliders in die ArrayList<BasicStroke> weitergeben können und danach das ganze immer mit den Vectordaten der Linie neu zeichnen lassen. Aber mit meinem Java Anfängerwissen komm ich da irgendwie nicht weiter.

Ich versteh nicht wo dein Problem ist, du hast doch genau das gleiche schon für deine Koordinaten gemacht.

Im Übrigen, wenn du schon einen eigenen Datentyp für deine Linie hast warum speicherst du die Strichstärke nicht auch dadrin anstatt noch eine zweite Liste zu benutzen.
 

Marco13

Top Contributor
Das Problem bei getGraphics ist ja gerade, dass es meistens zu funktionieren scheint, aber schlicht falsch ist, und deswegen früher oder später irgendwo kracht.

Wann und wo rufst du jetzt die Methode addToPaint auf (die anders aussieht, als ich beschreiben habe, und deswegen potentiell auch schlicht falsch ist) und warum steht da noch dieses
Gui.b = stroke;
drin? Wozu ist das gut?

Poste am besten mal ein KSKB (auch wenn sie die Gefahr von Augenblutungen schon abzeichnet ;) )
 

feldmarv

Mitglied
Das Problem bei getGraphics ist ja gerade, dass es meistens zu funktionieren scheint, aber schlicht falsch ist, und deswegen früher oder später irgendwo kracht.

Wann und wo rufst du jetzt die Methode addToPaint auf (die anders aussieht, als ich beschreiben habe, und deswegen potentiell auch schlicht falsch ist) und warum steht da noch dieses
Gui.b = stroke;
drin? Wozu ist das gut?

Poste am besten mal ein KSKB (auch wenn sie die Gefahr von Augenblutungen schon abzeichnet ;) )

das Gui.b sollte für die Werte aus dem JSlider sein. Ich verstehe nicht wie die Werte des JSlider ChangeListeners nun zu der Stroke ArrayList kommen.

Die Stroke ArrayList ist in der Klasse mit dem Thread und der JSlider ist in der Klasse Gui.
 

Marco13

Top Contributor
Dort wo bisher
addVector(einVector);
aufgerufen wird, muss eben eine Methode
Java:
public void addVector(Vector v, float thickness){
    objekte.add(v);
    strokes.add(new BasicStroke(thickness));        
}
mit sowas wie
addVector(einVector, dieThicknessDieManIrgendwieVomSliderHierHerTransportiertHat);
aufgerufen werden...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JSlider und ChangeListener Java Basics - Anfänger-Themen 1
S OOP Zwei JSlider in einer Klasse Java Basics - Anfänger-Themen 2
Z JSlider - Text wird nich angezeigt Java Basics - Anfänger-Themen 0
S JSlider Schritt Größe Java Basics - Anfänger-Themen 5
C Aktueller Wert von einem JSlider auf ein Label Java Basics - Anfänger-Themen 2
C JSlider und JRadioButton auf Label anzeigen? Java Basics - Anfänger-Themen 10
I Rückgabewert von JSlider Java Basics - Anfänger-Themen 15
R Zeitachse mit JSlider Java Basics - Anfänger-Themen 13
V JSlider wird nicht angezeigt Java Basics - Anfänger-Themen 12
H Swing: JSlider wird nicht angezeigt Java Basics - Anfänger-Themen 5
G JSlider + Lautstärke Java Basics - Anfänger-Themen 10
S Graphic im Panel änder durch JSlider Java Basics - Anfänger-Themen 2
S Schieberegler (JSlider) funktioniert nicht Java Basics - Anfänger-Themen 5
K Farbenspiel mit dem jSlider Java Basics - Anfänger-Themen 5
? JSlider Java Basics - Anfänger-Themen 9
G JSlider Wert auslesen Java Basics - Anfänger-Themen 1
M ChangeListener Problem bei JSlider Java Basics - Anfänger-Themen 3
S undo auf JSlider Java Basics - Anfänger-Themen 9
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
Kotelettklopfer Output korrekt trotz falschem Lösungsweg !? Java Basics - Anfänger-Themen 99
dome385 Ball Ball Kollision physikalisch korrekt Java Basics - Anfänger-Themen 5
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
tom.j85 Map - Values nicht korrekt ersetzt (Abzählspiel) Java Basics - Anfänger-Themen 13
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
M Strasse und Huasnummer korrekt eingeben Java Basics - Anfänger-Themen 13
D JAVA JDK korrekt installieren javac wird nicht gefunden Java Basics - Anfänger-Themen 2
C JFreeChart Linie nicht korrekt dargestellt Java Basics - Anfänger-Themen 1
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
E Gleitkomma zahlen mathemathisch korrekt multiplizieren Java Basics - Anfänger-Themen 5
D Abfrage ob Variableninhalt korrekt Java Basics - Anfänger-Themen 5
M JMadex funktioniert nicht korrekt Java Basics - Anfänger-Themen 8
G OOP Klassenaufbau korrekt? / MVC Java Basics - Anfänger-Themen 1
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
R Upload Servlet: Ausgabe nicht korrekt Java Basics - Anfänger-Themen 2
J String Ausgabe nicht-leerer Zeichen nicht korrekt Java Basics - Anfänger-Themen 10
K Wie übergebe ich hier korrekt die Werte Java Basics - Anfänger-Themen 5
U Attributsnamen korrekt oder falsch? Java Basics - Anfänger-Themen 4
G Exe-Datei korrekt in JAR ablegen Java Basics - Anfänger-Themen 4
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
Burny91 Compiler-Fehler Regular Expressions matchen nicht korrekt Java Basics - Anfänger-Themen 5
M Tag Monat Jahr korrekt berrechnen! Java Basics - Anfänger-Themen 10
M Calendar-Prüfung funktioniert nicht korrekt Java Basics - Anfänger-Themen 6
M String wird nicht korrekt ausgelesen. Java Basics - Anfänger-Themen 11
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
S Benutzereingabe über Scanner Klasse korrekt behandeln Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
F Verschlüsselten Text korrekt ausgeben Java Basics - Anfänger-Themen 2
Developer_X Applikation kann nicht korrekt von anderen Applikationen aufgerufen werden Java Basics - Anfänger-Themen 10
K Symbole werden nicht korrekt angezeigt ? Java Basics - Anfänger-Themen 7
G Maven Dependency für Oracle JDBC-Driver korrekt festlegen Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
Antoras Durchschnitt ist nicht korrekt; Eingaben löschen Java Basics - Anfänger-Themen 7
G Wochentag und Jahrtag werden nicht korrekt ermittelt Java Basics - Anfänger-Themen 8
G SwingWorker funktioniert nicht korrekt Java Basics - Anfänger-Themen 16
J Ein Fenster korrekt schließen? Java Basics - Anfänger-Themen 4
U Double-Variable führt Division nicht korrekt aus Java Basics - Anfänger-Themen 4
S UML korrekt umgesetzt? Java Basics - Anfänger-Themen 14
U GUI wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 8
M Kommentare - so korrekt? Java Basics - Anfänger-Themen 8
G Geöffnete Datei schreiben korrekt schreiben? Java Basics - Anfänger-Themen 6
G Warum ist der folgende Code korrekt? Java Basics - Anfänger-Themen 2
G Eingabe wird nicht korrekt eingelesen? Java Basics - Anfänger-Themen 2
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
R Look & Feel wird nicht korrekt angezeigt Java Basics - Anfänger-Themen 9
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
P9cman Ampel in Java implementieren Java Basics - Anfänger-Themen 3
districon Generics implementieren Java Basics - Anfänger-Themen 2
W UML Diagramm implementieren Java Basics - Anfänger-Themen 2
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
R Taxistand Implementieren Java Basics - Anfänger-Themen 1
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Gaudimagspam BMI in Java implementieren Java Basics - Anfänger-Themen 38
T Methode implementieren Java Basics - Anfänger-Themen 21
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
B UML-Klassendiagram get und set implementieren Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
E Klassen implementieren Java Basics - Anfänger-Themen 94
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben