Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch?

Wiesel

Mitglied
Hallo

Ich möchte "selbstgemachte" farbige JPanels auf JFrames bringen, aber sie werden nicht angezeigt...

Hier die JPanels:
Java:
import javax.swing.*;
import java.awt.*;

@SuppressWarnings("serial")
public class RGBField extends JPanel
{
    int x;
    int y;
    int height;
    int width;
    Color color;
 
    RGBField( int x, int y, int height, int width, Color color )
    {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.color = color;
    }
    
    @Override
    protected void paintComponent( Graphics g )
    {
        super.paintComponent( g );
        
        g.setColor( this.color );
        g.fillRect( x, y, width, height );
        g.setColor( Color.black );
        g.drawRect( x, y, width, height );
    }
    
}

Hier die aufrufende Klasse:
Java:
import java.awt.Color;
import javax.swing.JFrame;

public class Test 
{
    public static void main( String[] args )
    {
        Color redColor = new Color( 220, 230, 0 );
        Color blueColor = Color.blue;
        RGBField red = new RGBField( 10, 10, 100, 100, redColor );
        RGBField blue = new RGBField( 120, 10, 100, 100, blueColor );
        
        JFrame frame = new JFrame( "Test" );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setSize( 500, 500);
        frame.add( red );
        frame.add( blue );
        frame.setVisible( true );
        
        System.out.println( redColor.getBlue() );
        
    }

}
 

Enceladus271

Bekanntes Mitglied
Du hast bei deinem Frame kein Layout gesetzt. Somit wird als Default das BorderLayout verwendet. Wenn du nun beide Panels ohne Constraint zum Frame hinzufügst, wird das zweite Panel einfach über dem ersten platziert. Somit ist das erste nicht mehr sichtbar.

Und wenn du Komponenten zu einem Frame hinzufügen willst. bitte mit JFrame.getContentPane().add(...)
 

Wiesel

Mitglied
So?

Java:
import java.awt.*;
import javax.swing.*;

public class Test 
{
	public static void main( String[] args )
	{
		RGBField red = new RGBField( 10, 10, 100, 100, Color.red );
		RGBField blue = new RGBField( 120, 10, 100, 100, Color.blue );
		
		JFrame frame = new JFrame( "Test" );
		Container con = new Container();
		LayoutManager group = new GroupLayout( con );
		
		frame.setContentPane( con );
		frame.getContentPane().setLayout( group );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setSize( 500, 500);
		frame.setVisible( true );
		
	    frame.getContentPane().add( red );
		frame.getContentPane().add( blue );	
	}

}

Das geht auch nicht...
 

franky27

Bekanntes Mitglied
Ne das geht so nicht. Du musst dich erstmal richtig mit den Layoutmanagern auseinandersetzen und verstehen wie die fuktionieren.
Um dir mal einen Start zu geben, bleibe einfach mal beim BorderLayout. Da hast du die 5 Bereiche North,South,Center, East,West. Du musst jetzt deine Panel diesen Bereichen zuordnen.
Java:
frame.add(red, BorderLayout.EAST);
frame.add(blue, BorderLayout.WEST);
Damit setzt du das red panel in den EAST Bereich und das blue in den WEST Bereich des ContentPanes.
Je nachdem wie und wo du die Panels anordnen willst, musst du halt entscheiden welchen LayoutManager du brauchst.
Die setvisible Methode solltest du zudem immer als letztes aufrufen.

Und
bitte mit JFrame.getContentPane().add(...)
brauchst du schon seit Java 5 nicht mehr. frame.add() ist völlig audreichend und führt im Hintergrund die gleiche Methode aus.
 
Zuletzt bearbeitet:

Wiesel

Mitglied
OK, habe es jetzt so, aber es geht immer noch nicht:
Java:
package de.stdsoft.rbgmixer;

import java.awt.*;
import javax.swing.*;

public class Test 
{
	public static void main( String[] args )
	{
		RGBField red = new RGBField( 10, 10, 100, 100, Color.red );
		RGBField blue = new RGBField( 120, 10, 100, 100, Color.blue );
		
		JFrame frame = new JFrame( "Test" );
		LayoutManager layout = new BorderLayout();
	
		frame.setLayout( layout );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setSize( 500, 500);
	    frame.add( red, BorderLayout.EAST );
		frame.add( blue, BorderLayout.WEST );	
		frame.setVisible( true );
	}

}
 

Enceladus271

Bekanntes Mitglied
Solange beim BorderLayout genügend Platz vorhanden ist um alle Komponenten darzustellen, wird die Breite bzw. Höhe der Randkomponenten von der Preferred Size der jeweiligen Komponente bestimmt. Die CENTER Komponente bekommt den restlichen zur Verfügung stehenden Platz.

Da deine Panels leer sind, ist die Preferred Size deiner Panels 10 x 10 Pixel. Da du aber erst ab x=10 bzw x=120 die Rechtecke zeichnest, werden diese außerhalb des Panels gezeichnet (also nicht sichtbar).

Eine Lösung wäre im Konstruktor von RGBField setPreferredSize aufzurufen oder ein anderes Layout zu verwenden.

Als Layout Neuling kann es übrigens beim Testen manchmal hilfreich sein bei den Komponenten einen Rand zu setzen. So sieht man genau welche Komponente wie groß ist:
Java:
    RGBField( int x, int y, int height, int width, Color color ) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.color = color;
        setPreferredSize( new Dimension( width + x, height + y ) );
        setBorder( javax.swing.BorderFactory.createLineBorder( Color.BLACK ) ); // Zu Testzwecken
    }
 
Zuletzt bearbeitet:

Wiesel

Mitglied
Hallo

Ich habe das Problem einfach gelöst indem ich mit Netbeans eine neue Grafische Oberfläche mit GroupLayout zusammengeklickt ( mehrere hundert Zeilen Code )und statt den selbstgemachten ein einfaches JPanel eingesetzt und dann mit

Java:
panel.setBackground( Color.red )

ein rotes JPanel bekommen...
 

Harry Kane

Top Contributor
Tja. warum einfach, wenns auch kompliziert geht?
Weiter oben wurde schon darauf hingewiesen, daß deine farbigen Flächen auuserhalb des Anzeigebereiches des JPanels liegen und deshalb nicht gezeichnet werden.
Ich wette, wenn du anstatt mehrere hundert Zeilen Code zu schreiben, im Konstruktor deiner RGBField Klasse sowas wie setPreferredSize(new Dimension(width + 2*x, height + 2*y)) schreibst, du dann was sehen würdest. Zumindest wenn die x,y Werte so etwas wie eine freizulassende Umrahmung darstellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
L Swing Farbige JComboBox schreiben AWT, Swing, JavaFX & SWT 5
T jTable und farbige Spalten AWT, Swing, JavaFX & SWT 18
D Swing Farbige Zelle ohne DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 17
D Swing Farbige Zelle ohne DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 4
C JTable und farbige Zellen AWT, Swing, JavaFX & SWT 5
G Farbige Quadratein JCombobox AWT, Swing, JavaFX & SWT 5
M Farbige Linien zeichnen AWT, Swing, JavaFX & SWT 3
V JTable - farbige Boolean-Felder - geht das? AWT, Swing, JavaFX & SWT 3
G Farbige Label AWT, Swing, JavaFX & SWT 2
D Farbige JCombobox AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
CptK JPanels wechseln AWT, Swing, JavaFX & SWT 2
B Minimum x und y von Children-JPanels ermitteln AWT, Swing, JavaFX & SWT 3
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
S Liste von JPanels mit festen Höhen AWT, Swing, JavaFX & SWT 3
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
F Event Handling Kommunikation eines JButton ueber JPanels hinaus AWT, Swing, JavaFX & SWT 6
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
N Abspeichern eines kompletten JPanels AWT, Swing, JavaFX & SWT 57
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
W Swing JFrame mit unterschiedlichen JPanels AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C klassenübergreifende JPanels auf ein JFrame AWT, Swing, JavaFX & SWT 22
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
N Richtiges einstellen der size von JPanels AWT, Swing, JavaFX & SWT 10
D LayoutManager JPanels ohne LayoutManager platzieren AWT, Swing, JavaFX & SWT 6
Weltall 7 Swing JPanels werden doppelt gezeichnet AWT, Swing, JavaFX & SWT 6
C Swing JList mit JPanels AWT, Swing, JavaFX & SWT 6
J Swing JPanels werden ständig gezeichnet AWT, Swing, JavaFX & SWT 11
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
N Swing GUI updaten / Aufklappbare Jpanels AWT, Swing, JavaFX & SWT 2
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
J Swing Container innerhalb eines JPanels erfragen AWT, Swing, JavaFX & SWT 3
H Z-Order von JPanels in JFrames AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
R Verschachtelte JPanels FocusTraversalPolicy AWT, Swing, JavaFX & SWT 6
L mehere JPanels auf JFrame - setVisible() funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Swing JScrollPane fasst JPanel und Groesse des JPanels soll sich aendern AWT, Swing, JavaFX & SWT 2
H Größen von JPanels,JLable und JTextfield.. AWT, Swing, JavaFX & SWT 12
H Layoutprobleme mit Jpanels AWT, Swing, JavaFX & SWT 2
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
R Swing JPanel enthält mehrere JPanels - Positionsvergabe AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
R MousePosition über mehrere JPanels darstellen AWT, Swing, JavaFX & SWT 13
A Mehrere JPanels in ein JFrame AWT, Swing, JavaFX & SWT 4
R JFrame enthält JScrollPane mit JPanels AWT, Swing, JavaFX & SWT 3
R Mehrere JPanels in JScrollPane AWT, Swing, JavaFX & SWT 3
R JScrollPane, mehrere JPanels hinzufügen AWT, Swing, JavaFX & SWT 2
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
M Automatische Anpassung eines JPanels in einem JFrame AWT, Swing, JavaFX & SWT 6
M Anpassen der Größe eines JPanels (incl. gezeichneter Ampel) AWT, Swing, JavaFX & SWT 2
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
G Alle Komponenten eines JPanels durchlaufen AWT, Swing, JavaFX & SWT 11
G MVC Modell mit JPanels? AWT, Swing, JavaFX & SWT 1
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
G mehrere JPanels untereinander ? AWT, Swing, JavaFX & SWT 2
M Wirkliche Größe eines JPanels/o.ä. ermitteln AWT, Swing, JavaFX & SWT 3
T Bisherige JFrames in JPanels oder JInternalFrames? AWT, Swing, JavaFX & SWT 2
M Minimieren von verschachtelten JPanels AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben