# Undecorated JFrame im Fensterstyle



## FD_CASH (20. Aug 2012)

Hallo Leute,

Ist es möglich ein undekoriertes JFrame so einzufärben, dass es die Farbe eines Fensterrahmens hat?
Ich hab schon einiges versucht, selbst mit SystemColor sah es nicht so aus. Mein Code:


```
package Game;

import java.awt.Color;
import java.awt.SystemColor;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JFrame;

public class Frame extends JFrame{
	
/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public Frame() {
		
		setSize(600, 400);
		setDefaultLookAndFeelDecorated(true);
		setUndecorated(true);
		getContentPane().setBackground(new Color(SystemColor.windowBorder.getRGB()));
		setLocationRelativeTo(null);
		setShape(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 25, 25));
		
		setVisible(true);
		
	}
	
	
}
```

Danke schonmal,
FD_CASH


----------



## Kjubert (20. Aug 2012)

Ich denke du solltest ein JPanel über den JFrame werfen, der dann die Farbe hat.
Der Frame hat diese seltsame Java-Steel-Cool-Style-Irgendwas-Farbe, oder?
Sollte man nicht generell so arbeiten? Ich meine... die Komponenten nicht auf einen rohen Frame werfen, sondern immer mit Panels arbeiten?

Ich hoffe, ich konnte helfen!


----------



## FD_CASH (20. Aug 2012)

Erstmal danke für die Antwort!

Das stimmt, aber deshalb verwende ich:

```
getContentPane()
```
Da wird die Panel überliefert


----------



## haui95 (20. Aug 2012)

Das Stimmt so nicht, ein Panel ist ein Container und so gesehen auch eine Komponente, die man selber definieren und zu dem JFrame hinzufügen muss. Mit 
	
	
	
	





```
getContentPane()
```
 gibt dir das Programm den Standard Container des JFrames zurück. Außerdem ist es nicht mehr notwendig getContentPane() zu benutzen. Trotzdem würde ich immer vorzugsweise ein Panel auf deine Form legen, um sicher zu gehen, dass alle Komponente korrekt angezeigt werden und nicht auf der Strecke bleiben. ;-)

MfG


----------



## Kjubert (20. Aug 2012)

Ja richtig... mein Gedanke war folgender:

```
getContentPane()
```
 liefert den Container deines JFrames.
Das ist standardmäßig ein Panel, kann aber auch was anderes sein.
Ich hatte nun auch schonmal das Problem, dass ich dieses "Standard Panel" nicht so einfärben konnte, wie ein selbst eingefügtes. Als hätte ich mit 
	
	
	
	





```
getContentPane()
```
 nicht Zugriff auf die volle Funktionalität des Panels.
Mit sowas wie


```
JPanel mainPanel = new JPanel();
//....mainPanel auf richtige Größe, Farbe, etc....
getContentPane().add(mainPanel);
```

ging es besser. Vielleicht kann ja jemand die Funktionsweise dieses workarounds erklären 

EDIT: Da war jemand schneller...


----------



## haui95 (20. Aug 2012)

Klasse DrawRectangle, die die paintComponent()-Methode des abgeleiteten Panels überschreibt:


```
class DrawRectangle extends JPanel {

   public DrawRectangle(){
        repaint();
   }

   public void paintComponent(Graphics graph){
	
	super.paintComponent(graph);
	g.drawRect(20, 20, 50, 50);       // Größe des Rechtecks anpassen !
    }
}
```

main()-Methode:


```
public static void main( String[] args )
  {
     JFrame f = new JFrame();
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     f.setSize(100, 100);
     f.setUndecorated(true);
     f.add(new DrawRectangle());
     f.getContentPane().setBackground(Color.BLUE);   // Farbe deines Fensterrahmen gegebenfalls anpassen !
     f.setVisible(true);
  }
```


----------



## FD_CASH (20. Aug 2012)

Danke haui95, aber ich wollte nur das ganze wie einen Fensterramen aussehen lassen... :nA

Also, dass das komplette Fenster die Rahmenfarbe eines Fensters hat!

Danke trotzdem :toll:

Gruß, FD_CASH


----------



## FD_CASH (20. Aug 2012)

Weiß sonst noch jemand, wie man die Rahmenfarbe bekommen könnte?

bin immer noch nicht dahinter gekommen...


----------



## Kjubert (20. Aug 2012)

Und ich muss zugeben, dass ich mir wohl nicht ganz sicher sein kann, dass ich wirklich verstehe, was du mit "Rahmenfarbe" überhaupt meinst..
Also zum Beispiel bei good old Windows98/2000/XP dieses wundervolle grau? Willst du das dynamisch für jedes System oder suchst du einfach nur nach einer speziellen Farbe? Stell ich mich doof an?


----------



## FD_CASH (20. Aug 2012)

Genau das meine ich! 

Und auch dynamisch für jedes System!

```
SystemColor
```
 liefert ja ein paar Farben, aber es sind nicht die des Fensterrahmen bzw. der Titelleiste (Sie sehen jedenfalls nicht so aus)!

Vielleicht weiß jemand mehr...

Grüße, FD_CASH


----------



## haui95 (20. Aug 2012)

Achso, das meinst du, ich dachte an Fensterrahmen eher an einen farblichen Rahmen, der sich um deine Komponente herum erstreckt und eine bestimmte größe und breite hat, sowas wie ein Bilderrahmen


----------



## haui95 (20. Aug 2012)

Eigentlich kann man es ganz einfach folgendermaßen machen, sodass man ein undecorated JFrame hat, aber dennoch ein Fensterrahmen vorhanden ist:


```
public static void main(String args[]) {
    JFrame frame = new JFrame("");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setDefaultLookAndFeelDecorated(true);
    frame.setUndecorated(true);
    frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
    frame.setSize(300, 100);
    frame.setVisible(true);
```

MfG


----------



## FD_CASH (21. Aug 2012)

Eigentlich will ich nur, dass das ganze Fenster, dass keinen Rahmen hat, die Farbe eines Fensterrahmens erhält. Also dem Fenster die Rahmenfarbe mit 
	
	
	
	





```
setBackground()
```
 geben. Ich weiß aber nicht, wie man diese Fensterrahmenfarbe erhälten könnte... darum gehts mir


----------



## Michael... (21. Aug 2012)

FD_CASH hat gesagt.:


> wie man diese Fensterrahmenfarbe erhälten könnte...


Was ist denn die Fensterrahmenfarbe bzw. was verstehst Du darunter? Je nach System und Einstellung ist das einfarbig, enthält einen Farbverlauf oder teilweise transparent.

Interessant wäre vielleicht noch: Warum soll der ganze Hintergrund mit der "Fensterrahmenfarbe" eingefärbt werden?


----------



## FD_CASH (21. Aug 2012)

Mit Fensterrahmenfarbe ist die Hintergrundfarbe des Rahmens, der Titelleiste gemeint. Ich wollte jetzt wissen, wie man diese Farbe erhalten kann bzw. abfragen kann. Das Problem ist, wie du schon gesagt hast, dass sie bei jedem System anders ist.

Warum? - Einfach so. Wollte es mal ausprobieren

MfG FD_CASH


----------



## Michael... (21. Aug 2012)

Die Titelleiste ist ja in den seltesten Fällen einfarbig sondern hat einen Farbverlauf und ist oft auch "dreidimensional". Mit setBackground wird dann wohl sowieso nichts funktionieren.

Zum Ausprobieren gibt es doch sicherlich andere, sinnvoller Problemstellungen?


----------



## FD_CASH (21. Aug 2012)

Ja.. da muss ich dir wohl recht geben!

Danke an alle die geholfen haben! :toll:


----------



## bERt0r (21. Aug 2012)

Und was du gesucht hast war eben nicht der Fensterrahmen, sondern die Titelleiste?
SystemColor (Java 2 Platform SE 5.0)#activeCaption


----------



## FD_CASH (21. Aug 2012)

Die Farbe der Titelleiste bzw. des Rahmens


----------



## Androbin (17. Apr 2014)

Wieso benutzt du "SystemColor" :question: Benutze lieber "Color", denn damit kannst du auch ganz einfach auf die meist gebräuchlichen Farben zugreifen UND eigene Farben im RGB-Style definieren :exclaim:


----------

