zwei JComponente gleichzeitig auf JPanel hinzufügen

noch_anfänger

Aktives Mitglied
Hallo,
ich zeichne geometrische Fuguren an der JPanel mit graphics. Die Klassen für die Figuren sehen etwa so aus:
Java:
public class PaintTriangle extends JComponent{
    
    private int x;
    private int y;
    private int width;
    private int height;
    
    public PaintTriangle(int x, int y, int width, int height) {
	this.x = x;
	this.y = y;
	this.width = width;
	this.height = height;
	
    }
    
    public void paint(Graphics g) {
	int left = 30;
	int top = getHeight() - 30;

	g.translate(left, top);
	 
	g.drawLine(x, y, x + width, y); // Die horizontale Linie
	g.drawLine(x, y, x + (width / 2), y - height); // links
	g.drawLine(x + (width / 2), y - height, x + width, y); // rechts
    }
}

Sie werden an der JPanel so gezeichnet:
Java:
if(woodButton.isSelected() && holzButton.isSelected()) {
             PaintTriangle triangle = new PaintTriangle(spin2*STEP-5, 5, 10, 10);
		    PaintStoerobjekt objekt = new PaintStoerobjekt(spin1*STEP, 0, spin1*STEP, -(tabHolz.getHeight()/2) );
		    tabHolz.add(rhomb);
		    tabHolz.revalidate();
		    tabHolz.repaint();
		    tabHolz.add(objekt);
		    tabHolz.revalidate();
		    tabHolz.repaint();
}

Das Problem ist, dass nur das letzte JComponent wird angezeichnet, in diesem Fall
Code:
object
. Ich brauche aber zwei. Wie kann ich das machen????:L
 
G

Gast2

Gast
1. paintComponent überschreiben
2. Kommt es auf deinen LayoutManager an. Meine Glaskugel sagt mit du benutzt ein BorderLayout...
 
G

Gast2

Gast
Je nachdem was du vorhast...
weiß es ja nicht musst halt eins in Center setzen und des andere ins South.
 

noch_anfänger

Aktives Mitglied
Zuerst wird das Koordinatensystem gezeichnet. Und dann kommen auch weitere Zeichnungen auf das JPanel an. Ich will bei bestimmten Bedingungen gleichzeitig zwei Bildchen zeichnen können.
Mit CENTER und SOUTH wird es irgendwie unzureichend. Oder ich verstehe nicht, was du meinst.
 

Michael...

Top Contributor
Du könntest eine JComponent nehmen auf die Du alle Objekt zeichnest bzw. zeichnen lässt. Es muss ja nicht jedes Objekt eine eigene Komponente besitzen?
 

noch_anfänger

Aktives Mitglied
Die Objekte, die ich zeichne, sind als
Code:
extends JComponent
definiert.
Wenn ich sie zeichnen lasse, füge ich sie mit
Code:
tabHolz.add(triangle)
zu JPanel hunzu.

Code:
tabHolz.add(triangle, BorderLayout.SOUTH)
hilft auch nicht.
 

noch_anfänger

Aktives Mitglied
Auf solche Weise geht evtl. nicht, zwei JComponente gleichzeitig zu JPanel hinzufühgen...
Wie konnte man am einfachsten eine Klasse (NichtExtendsJcomponent ) für die vertikale Linien erstellen, um diese dann auf Jpanel zu zeichnen?
 

Marco13

Top Contributor
Du könntest eine JComponent nehmen auf die Du alle Objekt zeichnest bzw. zeichnen lässt. Es muss ja nicht jedes Objekt eine eigene Komponente besitzen?

Genau!

Wie konnte man am einfachsten eine Klasse (NichtExtendsJcomponent ) für die vertikale Linien erstellen,...
Java:
interface Paintable
{
    public void paintOn(Graphics g);
}

class Dreieck implements Paintable
{
    public void paintOn(Graphics g) { male Dreieck auf g }
}

class PaintPanel extends JPanel
{
    private List<Paintable> paintables = new ArrayList<Paintable>(); // add/remove-Methoden dafür

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        for (Paintable p : paintables) paintable.paintOn(g);
    }
}

Zu dem PaintPanel kann man dann beliebig viele "Paintable" Objekte (z.B. eben Dreiecke) hinzufügen.
 

Michael...

Top Contributor
Folgend mal ein grobes Konzept wie ich es in etwa machen würde:
- eine Klasse die von JComponent erbt um zu zeichnen, sie enthält eine Liste in der die zu zeichnenden Objekte abgelegt werden
- ein Interface das alle Objekte die gezeichnet werden wollen erben müssen
- eine Bsp Klasse, die das Interface implementiert
Java:
class PaintingComponent extends JComponent {
	private List<Drawable> drawingObjects;
	{ // Dummy Initialisierung
		drawingObjects = new ArrayList<Drawable>();
		drawingObjects.add(new MyLine());
	}
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		for (Drawable dr : drawingObjects)
			dr.paint(g);
	}
}

interface Drawable {
	public void paint(Graphics g);
}

class MyLine implements Drawable {
	private int x1 = 50, x2 = 200, y1 = 50, y2 = 50;
	public void paint(Graphics g) {
		g.drawLine(x1, y1, x2, y2);
	}
}
 
G

Gast2

Gast
Also wenn du wirklch nur zeichnen willst, würde ich sowas machen

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;


public class PaintPanel extends JPanel
{

	List<Shape> list = new ArrayList<Shape>();
	
	public PaintPanel() {
		super();
		list.add(new Line2D.Double(0, 0, 200, 200));
		list.add(new Rectangle2D.Double(0, 50, 200, 200));
		setPreferredSize(new Dimension(250,300));
	}
	
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D graphics2d = (Graphics2D) g;
		for(Shape shape : list){
			graphics2d.draw(shape);
		}
	}
	
		
}
 

noch_anfänger

Aktives Mitglied
Warum soll ich
Code:
list.add(PaintableObjekt)
im Konstruktor machen? Objekte müssen nicht alle auf ein einziges Mal gezeichnet werden... Ich will public Methoden dafür.
 

Marco13

Top Contributor
Java:
class PaintPanel extends JPanel
{
    private List<Paintable> paintables = new ArrayList<Paintable>(); // add/remove-Methoden dafür

    public void addPaintable(Paintable paintable)
    {
        paintables.add(paintable);
    }
    public void removePaintable(Paintable paintable)
    {
        paintables.remove(paintable);
    }
 
    ...

:bahnhof:

@SirWayne: Solange das zu Zeichnende Objekt nicht z.B. zwei Farben enthält, ist Shape natürlich OK. (Oder präziser: Shape ist OK, wenn man nur Shapes zeichnen will :D)
 
G

Gast2

Gast
Jop stimmt ;)... aber er macht ja auch nichts anderes ^^...

Ja ich würde die shapes auch eher in den einzelnen Componenten benutzen...
 

noch_anfänger

Aktives Mitglied
Cool! Es werden zwei Bildchen gleichzeitig gezeichnet!

Noch eine Frage: wie kann man eine gestrichelte Linie zeichnen? Keine richtige Shape, einfache Linie. (evtl. mit Graphics2D?)
 
Zuletzt bearbeitet:

noch_anfänger

Aktives Mitglied
Lieber Ebenius,

ich habe ein Problemchen mit
Code:
dashed BasicStroke
: nach dem ich ein Objekt mit
Code:
dashed BasicStroke
zeichne, werden alle andere Objekte auch gestrichelt gezeichnet. Soll man das "abschalten"? Warum passiert sowas?
 

Ebenius

Top Contributor
So:
Java:
final Graphics2D g2d = g.create();
try {
  // stroke setzen
  // zeichnen
} finally {
  g2d.dispose();
}
Warum? Weil man die Eigenschaften des Graphics-Objektes verändert. Jedes andere Objekt das mit diesem Objekt gezeichnet wird hat diese Eigenschaften dann auch, es sei denn es verändert sie wieder. Grundsätzlich: Alles -- außer vielleicht Color -- was man am Graphics-Objekt ändert muss man wieder zurück setzen. Oder aber -- wie oben -- auf einer Kopie arbeiten.

Ebenius
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
raeuchertofu Input bei zwei jTextfields AWT, Swing, JavaFX & SWT 5
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
P Zwei JTables auf eine A4-Seite mit einstellbaren Rändern AWT, Swing, JavaFX & SWT 9
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
Z Swing Kann man denn abstand zwischen zwei Buttons berechnen AWT, Swing, JavaFX & SWT 5
M Kommunikation zwischen zwei Stages AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
L Wörter zwischen zwei Grenzen einlesen. AWT, Swing, JavaFX & SWT 13
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D Zwei getrennte Java Klassen verbinden. Wie ? AWT, Swing, JavaFX & SWT 2
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Kombination von zwei Frames AWT, Swing, JavaFX & SWT 16
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
D Swing Kommunikation zwischen zwei GUI's AWT, Swing, JavaFX & SWT 2
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
A Oberfläche mit zwei Klassen und actionlistener verbinden AWT, Swing, JavaFX & SWT 7
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
V JavaFX Zwei Dinge in einer CellFactory erledigen AWT, Swing, JavaFX & SWT 8
B Vertikale Größenänderung zwischen zwei Widgets AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
C Zwei Ebenen in Graphics ? AWT, Swing, JavaFX & SWT 0
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
B Swing focusGained öffnet sich zwei mal AWT, Swing, JavaFX & SWT 3
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
A Swing zwei JComboBoxen miteinander vergleichen und anschließend Button umwandeln AWT, Swing, JavaFX & SWT 7
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
B Kommunikation zwischen zwei Fenstern und vorübergehende Speicherung der Eingaben AWT, Swing, JavaFX & SWT 4
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
T LayoutManager GridBagLayout - zwei jTable mit unterschiedlicher Höhe AWT, Swing, JavaFX & SWT 2
L Zeichnen in zwei Fenstern AWT, Swing, JavaFX & SWT 8
J JOptionPane mit zwei Buttons?! AWT, Swing, JavaFX & SWT 3
F Swing Ladebildschirm zwischen zwei SWING Frames AWT, Swing, JavaFX & SWT 11
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
Helgon Zwei jTables gleich Breit AWT, Swing, JavaFX & SWT 4
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
A Daten umherschieben zwischen zwei Klassen AWT, Swing, JavaFX & SWT 40
M Swing Zwei Jlists - selectedElement binden? AWT, Swing, JavaFX & SWT 7
K zwei TableModel AWT, Swing, JavaFX & SWT 9
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
F JPanel mit zwei Methoden her beschreiben. AWT, Swing, JavaFX & SWT 8
Y xormode bzw bild in zwei ebenen zeichnen AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
G Wie erzeugt man zwei identische JPanel AWT, Swing, JavaFX & SWT 4
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
B LayoutManager Positionierung zwischen zwei Layoutkomponenten AWT, Swing, JavaFX & SWT 2
N Swing DnD zwischen zwei JTrees AWT, Swing, JavaFX & SWT 2
H Swing Zwei Fragen AWT, Swing, JavaFX & SWT 5
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
T Zwei Jtables eine JscrollPane AWT, Swing, JavaFX & SWT 3
L Zwei Anwendungen kommen sich in die Quere! AWT, Swing, JavaFX & SWT 4
M SWT DND zwischen zwei TreViewern in beide Richtungen AWT, Swing, JavaFX & SWT 10
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
N Ein Button für zwei Aktionen AWT, Swing, JavaFX & SWT 7
V Swing Auslösen von zwei Events hintereinander AWT, Swing, JavaFX & SWT 4
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
algorismi Unterscheiden zwischen zwei JLists AWT, Swing, JavaFX & SWT 5
P GridBagLayout - zwei Spalten mit gleicher Größe AWT, Swing, JavaFX & SWT 11
H Ein Button - zwei Actions AWT, Swing, JavaFX & SWT 3
T Schieberegler mit zwei Schiebern AWT, Swing, JavaFX & SWT 2
M SWT SWT - Zwei Tabellen gleicher Größe AWT, Swing, JavaFX & SWT 5
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
S Vereinen von zwei MenuBar AWT, Swing, JavaFX & SWT 3
P JList mit zwei Werten AWT, Swing, JavaFX & SWT 9
0 JMenuItem nicht in zwei JMenus möglich? AWT, Swing, JavaFX & SWT 2
G Variblenwert zwischen zwei Klassen übergeben AWT, Swing, JavaFX & SWT 3
B zwei JLabels überlappen lassen AWT, Swing, JavaFX & SWT 5
T Kommunikation zwischen Zwei GUI-Klassen AWT, Swing, JavaFX & SWT 2
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
T Kommunikation zwischen zwei jFrames AWT, Swing, JavaFX & SWT 4
G Datenaustausch zwischen zwei JFrames AWT, Swing, JavaFX & SWT 3
K Zwei JFrames aneinanderdocken? AWT, Swing, JavaFX & SWT 5
A Eins von zwei offnen Fenster/Frames schließen AWT, Swing, JavaFX & SWT 2
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
hdi zeitgleiches fokusieren von zwei panels AWT, Swing, JavaFX & SWT 2
I JTable: "GLEICHZEITIG" zwei verschiedene TableMode AWT, Swing, JavaFX & SWT 2
R JDialog dispose() wird zwei mal aufgerufen AWT, Swing, JavaFX & SWT 2
T zwei panel und ein thread AWT, Swing, JavaFX & SWT 5
W Instanz eines Steuerelementes an zwei Stellen zeichnen AWT, Swing, JavaFX & SWT 3
M Zwei JMenuBars AWT, Swing, JavaFX & SWT 5
W JTree - aus zwei mach eins AWT, Swing, JavaFX & SWT 2
M Zwei Element auf ein Contentpane AWT, Swing, JavaFX & SWT 45

Ähnliche Java Themen


Oben