Rahmen für undekorierten JFrame

  • Themenstarter Themenstarter mickedplay
  • Beginndatum Beginndatum
M

mickedplay

Gast
Guten Morgen,

ich würde gerne wissen, wie man für einen undekorierten JFrame (Frame.setUndecorated(true)😉 einen Rahmen hinzufügt. Undekoriert nehm ich, damit man die Minimier-, Maximier-, Schließ- und Namensfunktion nicht sieht. Am Ende des Posts sind die Screenshots; komme mit den Anhängen noch nicht so klar 😀)

Auf jeden Fall sieht man bei einem einen grünen Rand (grün, weil mein Windowsdesign, wie z.B. die Taskleiste auch grün sind; ist bei jedem User anders), den habe ich selber hinzugefügt (Bildbearbeitung) um zu zeigen, wie es sein soll. Der andere Screenshot zeigt das jetzige Bild, wie es NICHT aussehen soll.

Ich habe auch mal hier (http://www.java-forum.org/awt-swing-javafx-and-swt/140442-undecorated-jframe-fensterstyle.html) geguckt, aber das wurde entweder nicht korrekt beantwortet, oder es entspricht nicht meinen Wünschen.


Hoffe ihr versteht, was ich meine. Also, das Bild mit dem grünen Rand will ich haben, statt dem anderen. 🙂
Danke!
 

Anhänge

  • Bild (unbearbeitet).png
    Bild (unbearbeitet).png
    7,9 KB · Aufrufe: 32
  • Bild (bearbeitet).png
    Bild (bearbeitet).png
    13,2 KB · Aufrufe: 40
Zuletzt bearbeitet von einem Moderator:
Du willst genau den Windowsrahmen: setUndecorated(false)

Ich denke, den gibt es nur in Verbindung mit den Buttons. Das, was du willst, läuft vermutlich auf die WinAPI hinaus also JNI/JNA.
 
Danke! Aber ich möchte genau den Windowsrahmen. Der bei dir gezeigt ist viel dünner und nur am Rechten und Linken Rand.

Nicht gleich aufgeben! Guck dir den Code genau an!

Java:
...
pan.setBorder(new LineBorder(Color.blue));
...

Aha, du kannst also hier ein Border setzen. Es gibt eine BorderFactory, die dir alle möglichen Border generiert.
Wenn du nun hier die Border (entweder ausprobieren, oder Doku lesen) anguckst, dann wirst du ein passendes finden.
Ohne abgerundete Ecken:

Java:
// 5 = breite des Borders
pan.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.lightGray));

Mit abgerundeten Ecken :
Java:
// 10 = breite
pan.setBorder(BorderFactory.createStrokeBorder(new BasicStroke(10,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND), null ));
Wie du hier die Farbe änderst, kannst du rausfinden, das schreibe ich jetzt nicht hin 🙂

Was die restlichen Parameter alles bedeuten, habe ich jetzt keine Lust aufzuschreiben, einfach Doku lesen ! 🙂
 
Zuletzt bearbeitet:
Nicht gleich aufgeben! Guck dir den Code genau an!

Java:
...
pan.setBorder(new LineBorder(Color.blue));
...

Aha, du kannst also hier ein Border setzen. Es gibt eine BorderFactory, die dir alle möglichen Border generiert.
Wenn du nun hier die Border (entweder ausprobieren, oder Doku lesen) anguckst, dann wirst du ein passendes finden.
Ohne abgerundete Ecken:

Java:
// 5 = breite des Borders
pan.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.lightGray));

Mit abgerundeten Ecken :
Java:
// 10 = breite
pan.setBorder(BorderFactory.createStrokeBorder(new BasicStroke(10,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND), null ));
Wie du hier die Farbe änderst, kannst du rausfinden, das schreibe ich jetzt nicht hin 🙂

Was die restlichen Parameter alles bedeuten, habe ich jetzt keine Lust aufzuschreiben, einfach Doku lesen ! 🙂

Ich werd's versuchen, auch wenn ich kein Panel in diesem Frame verwende.
Kurz zu einem anderen "Problem". Wieso ist der Output "Version: 1.2000000000000002" und nicht "Version: 1.2"??
Java:
public class Test6
{
	public static double version = 1.1;
	public static double updateVersion = (version + 0.1);
	
	public static void main(String[] args)
	{
		System.out.println("Version: " + updateVersion);
	}
}

Danke! 🙂
 
Interpretier die 1.1 und 0.1 mal als double. Dann müsste es funktionieren.

Das kann mit Rundungsfehlern oder Fehlern beim Casten zu tun haben.
 

Neue Themen


Zurück
Oben