Zeichnen in zwei Fenstern

Limoneneis

Mitglied
Hallo,

ich lerne gerade AWT/Swing. Ich möchte in meiner GUI zwei Fenster haben die ich separat bemalen kann. Wie geht das? Ich kann ja immer nur eine paint-Methode manipulieren. Ich bräuchte aber für jedes Fenster eine separate paint-Funktion.

Kann mir bitte jemand weiterhelfen?

grüße
 

Marco13

Top Contributor
Man kann in jedes Fenster ein JPanel legen, in dem man die paintComponent-Methode passend überschrieben hat. Vielleicht zielt deine Frage darauf ab, dass es ggf. unterschiedliche Klassen sein müssen?
 

Limoneneis

Mitglied
Hallo,

danke für die Antwort aber was ich machen will, ist, dass man Innerhalb eines Fensters zwei weitere Subfenster hat, die immer sichtbar sind.

Links male ich zB dann kreise und rechts unabhängig davon rechtecke. Das müssten ja dann zwei Graphics-Objekte (zB g1, g2) sein.

Wie kann ich das Java verklickern?

danke
 

GUI-Programmer

Top Contributor
Das müssten ja dann zwei Graphics-Objekte (zB g1, g2) sein.

Ja und Nein. Du zeichnest nicht direkt, indem du dir ein Graphics-Objekt holst, sondern indem du die paintComponent() Methode eines JPanels (oder einer von JComponent erbenden Klasse) überschreibst.

Wenn du wirklich zwei "echte" Fenster, also mit Schließen-Funktion, Minimieren, etc. willst, dann empfiehlt es sich zwei JInternalFrames zu erstellen, und deren ContentPane jeweils ein JPanel zuweisen, in welchem du wie oben beschrieben, zeichnest.

Falls du allerdings einfach nur 2 Zeichenbereiche meinst, reicht es auch aus 2 JPanel direkt auf dein Hauptframe zu adden und in diesem zu zeichen.

Für deinen Fall empfiehlt imo das Zeichen aus KEIN Swing-Tutorial , der Teil mit dem Interface Paintable.
 

Limoneneis

Mitglied
...

Falls du allerdings einfach nur 2 Zeichenbereiche meinst, reicht es auch aus 2 JPanel direkt auf dein Hauptframe zu adden und in diesem zu zeichen.

....

Hi ich habe mich mal daran versucht, aber ich kriege das irgendwie nicht hin. Das hier habe ich programmiert (bin Anfänger) und habe mir vieles abgeguckt von anderen Codes.

Java:
public class AWTFrame {
    
    public AWTFrame(){
        
        PanelBsp p1 = new PanelBsp();
        PanelBsp p2 = new PanelBsp();
        p1.setSize(100, 100);
        
        JFrame f = new JFrame("Fenster");
        f.setSize(300,300);
        
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        p1.setPreferredSize(new Dimension(300,300));
        f.setLayout(new BorderLayout());
        f.add(p1);
        f.add(p2); //Wie kann ich hier die Position festlegen?
        f.setBackground(Color.yellow);
        f.pack();
        f.setVisible(true);
    }
    
}


Dann noch eine Klasse für Panels

Java:
public class PanelBsp extends JPanel{
    
    public PanelBsp(){
        
        this.setSize(100, 100);
        this.setBackground(Color.red);
        
        this.setVisible(true);
        
    }
    
    public void paint(Graphics g){
        super.paint(g);
        g.drawString("Hallo", 50, 50);
        
    }
    
    
    
}

und die Main:

Java:
    public static void main(String[] args) {
        AWTFrame awtF = new AWTFrame();
    }

Ich hätte das gerne so, dass Links ein Panel mit Hallo steht und rechts davon auch nochmal ein Panel ist. Anschließend soll man beide Panel getrennt voneinander manipulieren.

gruß
 

Marco13

Top Contributor
Die "allgemeinste" Trennung wäre ein
Java:
public class OtherPanelBsp extends JPanel{
    
    public OtherPanelBsp(){
        
        this.setSize(100, 100);
        this.setBackground(Color.red);
        
        this.setVisible(true);
        
    }
    
    public void paint(Graphics g){
        super.paint(g);
        g.drawString("Was anderes", 50, 50);
        
    }
    
    
    
}
und in der Hauptklasse dann eben
OtherPanelBsp p2 = new OtherPanelBsp();

Wenn es nur um einen anderen String ginge (oder überhaupt, irgendwas "ähnliches") könnte man sich natürlich tausende von "weniger getrennten" Abstufungen vorstellen...
 

GUI-Programmer

Top Contributor
1.
Limoneneis hat gesagt.:
Ich hätte das gerne so, dass Links ein Panel mit Hallo steht und rechts davon auch nochmal ein Panel ist.

OK, dann reicht dafür wohl das GridLayout aus.

2.
Ein
Code:
[B]this.setVisible(true);[/B]
ist völlig unnötig bei einer von JComponent erbenden Klasse (--> JPanel) aufzurufen, da standartmäßig eh schon sichtbar.

3.
Bei einem JPanel wird in der Regel zum Zeichnen nicht die paint()-Methode überschrieben, sondern die paintComponent().

Desweiteren kann es lohnenswert sein, bei Swing mit der ContentPane zu arbeiten.

4.
Limoneneis hat gesagt.:
Anschließend soll man beide Panel getrennt voneinander manipulieren.

Ich jetzt zwar nicht genau inwiefern du was manipulieren möchtest, aber ich glaube ganau hierfür bietet sich der Link an, dem ich dir bereits geben habe, mit einem Interface Paintable zu arbeiten. Ich wollte mal nicht so sein und hab es auf deine Code mal angewand:
Java:
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Graphics2D;

public class AWTFrame {
    
    public AWTFrame(){
        PanelBsp p1 = new PanelBsp();
		p1.setPreferredSize(new Dimension(300,300));
		
        PanelBsp p2 = new PanelBsp();
        p2.setPreferredSize(new Dimension(300,300));
        
        JFrame f = new JFrame("Fenster");
        //f.setSize(300,300); // Fällt weg, da die ContentPane die Größe 600x300 
							  // erhält, und pack() augerufen wird
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new GridLayout()); // GridLayout anstatt BorderLayout
        f.getContentPane().add(p1);
        f.getContentPane().add(p2);
        f.getContentPane().setBackground(Color.yellow);
        f.pack();
        f.setVisible(true);
		
		p2.getPaintables().add(new Paintable() {
			public void paintObject(Graphics2D g2) {
				// Hier der dynamisch hinzugefügte Zeichncode, bsbw.:
				g2.setColor(Color.GRAY);
				g2.fillRect(10, 10, 50, 50);
			}
		});
		// +Aufruf zum Neuzeichnen:
		p2.repaint();
    }
    
}

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

public class PanelBsp extends JPanel{
	private List<Paintable> painables;
	
    public PanelBsp(){
		painables = new ArrayList<Paintable>();
        this.setBackground(Color.red);
    }
	
    public void paintComponent(Graphics g){
        super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		
        g2.drawString("Hallo", 50, 50);
		for(Paintable paintable: paintables) {
			paintable.paintObject(g2);
		}
    }
	
	public List<Paintable> getPaintables() {
		return paintables;
	}
}

Java:
import java.awt.Graphics2D;

public interface Paintable {
	public void paintObject(Graphics2D g2);
}

Mögliche Fehler oder fehlende Imports im Code sind möglich!!!


P.S AWTFrame ist ein schlechter Name für ne Klasse die mit JFrame arbeitet!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
M Swing Warum öffnen sich beim Zeichnen mit Swing plötzlich zwei Fenster? AWT, Swing, JavaFX & SWT 5
Y xormode bzw bild in zwei ebenen zeichnen AWT, Swing, JavaFX & SWT 4
W Instanz eines Steuerelementes an zwei Stellen zeichnen AWT, Swing, JavaFX & SWT 3
A Zeichnen auf zwei Labels. Geht nit AWT, Swing, JavaFX & SWT 7
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S GUI Kreis zeichnen AWT, Swing, JavaFX & SWT 13
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Zeichnen einer sich bewegenden Box mit BufferStrategy zieht Spur AWT, Swing, JavaFX & SWT 2
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
Helgon Swing Mit Swing zeichnen / NetBeans GUI AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
4 Swing Graphen selber zeichnen AWT, Swing, JavaFX & SWT 2
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
T Zeichnen von getSubimage funktioniert nicht AWT, Swing, JavaFX & SWT 7
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
N JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
D Zeichnen eines Barplots AWT, Swing, JavaFX & SWT 2
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
M Suche Javabibliothek zum Zeichnen mathematischer Funktionen AWT, Swing, JavaFX & SWT 11
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
M Swing In GUI-Builder-JFrame mit Menü Schreiben und Zeichnen AWT, Swing, JavaFX & SWT 4
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
C Funktionen zeichnen AWT, Swing, JavaFX & SWT 16
P JPanel neu zeichnen AWT, Swing, JavaFX & SWT 10
M Auf einem Hintergrundbild zeichnen AWT, Swing, JavaFX & SWT 2
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T Oval auf ein JPanel zeichnen AWT, Swing, JavaFX & SWT 3
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben