Undecorated JFrame im Fensterstyle

FD_CASH

Mitglied
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:

Java:
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
 
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!
 
Erstmal danke für die Antwort!

Das stimmt, aber deshalb verwende ich:
Code:
getContentPane()
Da wird die Panel überliefert
 
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
Java:
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
 
Ja richtig... mein Gedanke war folgender:
Code:
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
Code:
getContentPane()
nicht Zugriff auf die volle Funktionalität des Panels.
Mit sowas wie

Java:
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...
 
Zuletzt bearbeitet:
Klasse DrawRectangle, die die paintComponent()-Methode des abgeleiteten Panels überschreibt:

Java:
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:

Java:
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);
  }
 
Zuletzt bearbeitet:
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
 
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?
 
Genau das meine ich! 😀

Und auch dynamisch für jedes System!
Code:
 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
 
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 😀
 
Eigentlich kann man es ganz einfach folgendermaßen machen, sodass man ein undecorated JFrame hat, aber dennoch ein Fensterrahmen vorhanden ist:

Java:
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
 
Eigentlich will ich nur, dass das ganze Fenster, dass keinen Rahmen hat, die Farbe eines Fensterrahmens erhält. Also dem Fenster die Rahmenfarbe mit
Code:
setBackground()
geben. Ich weiß aber nicht, wie man diese Fensterrahmenfarbe erhälten könnte... darum gehts mir 😳
 
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
 
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?
 
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:
 

Zurück
Oben