Swing Eigenen Fensterrahmen und (Fenster-)Erweiterungen erstellen

Status
Nicht offen für weitere Antworten.

data89

Bekanntes Mitglied
Hallo,

meine Frage ist ganz einfach: wie baue ich mir einen "eigenen" JFrame in einem speziellen Look, ohne irgendwelche LaF's?
Hier ein Beispiel was ich meine:
mainwindow_v2.png

Ich möchte sowohl einen eigenen Fensterrahmen (mit Schatten und der Kopfzeile etc.) sowie einen solchen Tab bauen, der an der Seite hervorschaut. Wie stelle ich das an?

Ich weiß, dass man die Fensterumrahmung abschalten kann, aber wie man dann fortfährt um ein solches Fenster zu bauen (vorallem mit Schatten und so) weiß ich nicht!

Es wäre schön, wenn Ihr mir ein Paar Tipps/Links/Codeschnipsel geben würdet, damit ich hier weiterkomme!

Vielen Dank vorab,
data89
 
Zuletzt bearbeitet von einem Moderator:

Wildcard

Top Contributor
Schatten, Dekorationen und der gleichen solltest IMO wirklich dem WIndow Manager des Betriebssystems überlassen. Möglich ist es zwar seit Java 1.6u10, allerdings musst du resize, move und dergleichen komplett selbst implementieren wenn du die Window Decorations entfernst.
 

KrokoDiehl

Top Contributor
Naja, dafür wirst du einen
Code:
WindowListener
und einen
Code:
MouseListener
(ggfs auch
Code:
MouseMotionListener
) entsprechend implementieren müssen.

Damit dein Frame komplett rahmenlos ist, musst du
Java:
JFrame.setDefaultLookAndFeelDecorated(false);
myFrame.setUndecorated(true);
setzen.
Dieser Link hat ein paar Hinweise dazu.
 

data89

Bekanntes Mitglied
Hallo,

dass ich einen MouseListener benötige und wie ich den Frame undecorated setze habe ich mir schon gedacht. Aber mich interessiert mehr die Logik hinter der ganzen Angelegenheit:

* Wozu benötige ich einen WindowListener (=klar, um die Events abzufangen) bzw. wie baue ich den ein?
* Wie kann ich dafür sorgen, dass sich das gesamte Fenster beim Klick auf z.B. ein JPanel bewegt?

data89
 

data89

Bekanntes Mitglied
Hallo,

inzwischen bin ich schon so weiter gekommen (siehe unten).
Aber warum bilden sich so hässliche "Zieh-Effekte", wenn man das Fenster verschiebt oder verkleinert/vergrößert?

data89

Code:
package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ShapedWindow extends JFrame implements WindowListener {

	private static Point point = new Point();

	public ShapedWindow() {
		super("Test oval-shaped window");

		this.setLayout(new BorderLayout());

		JPanel p = new JPanel();

		p.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));

		p.setBackground(Color.blue);
		p.setPreferredSize(new Dimension(0, 20));
		this.add(p, BorderLayout.NORTH);

		this.addWindowListener(this);
		this.setUndecorated(true);

		final JPanel frame = p;

		final JFrame frame1 = this;

		frame.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				point.x = e.getX();
				point.y = e.getY();
			}
		});
		frame.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent e) {
				Point p = frame1.getLocation();
				frame1.setLocation(p.x + e.getX() - point.x, p.y + e.getY()
						- point.y);
			}
		});

		JPanel left = new JPanel();
		left.setBackground(Color.blue);
		left.setPreferredSize(new Dimension(5, 0));

		left.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));

		left.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				point.x = e.getX();
				point.y = e.getY();
			}
		});
		left.addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseDragged(MouseEvent e) {
				Dimension p1 = frame1.getSize();
				Point p = frame1.getLocation();

				frame1.setBounds(p.x - (point.x - e.getX()), p.y, p1.width
						+ (point.x - e.getX()), p1.height);

				RoundRectangle2D rr = new RoundRectangle2D.Float(0, 0, frame1
						.getBounds().width, frame1.getBounds().height, 5, 5);

				Rectangle2D r = new Rectangle2D.Float(0, 5,
						frame1.getBounds().width, frame1.getBounds().height - 5);

				// Create a new shape
				Area shape = new Area(rr);

				// Add shape to shape 2
				shape.add(new Area(r));
				// Subtract shape with shape 3
				// shape.subtract(new Area(shape3));
				// shape.intersect(new Area(shape4));
				// shape.exclusiveOr(new Area(shape5));

				com.sun.awt.AWTUtilities.setWindowShape(frame1, shape);

			}
		});

		this.add(left, BorderLayout.WEST);

		/*
		 * this.add(new JButton("test")); this.add(new JCheckBox("test"));
		 * this.add(new JRadioButton("test")); this.add(new JProgressBar(0,
		 * 100));
		 */

		this.setSize(new Dimension(800, 600));
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		JFrame.setDefaultLookAndFeelDecorated(false);
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				Window w = new ShapedWindow();
				w.setVisible(true);

				RoundRectangle2D rr = new RoundRectangle2D.Float(0, 0, w
						.getBounds().width, w.getBounds().height, 5, 5);

				Rectangle2D r = new Rectangle2D.Float(0, 5,
						w.getBounds().width, w.getBounds().height - 5);

				// Create a new shape
				Area shape = new Area(rr);

				// Add shape to shape 2
				shape.add(new Area(r));
				// Subtract shape with shape 3
				// shape.subtract(new Area(shape3));
				// shape.intersect(new Area(shape4));
				// shape.exclusiveOr(new Area(shape5));

				com.sun.awt.AWTUtilities.setWindowShape(w, shape);
			}
		});
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub

	}

}
 

Steev

Bekanntes Mitglied
Wenn ich dein Beispiel bei mir ausführe bekomme ich keinen Zieheffekt...
Keine Ahnung. Bei mir geht´s
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Encera ArrayList mit eigenen Objekten in JavaFX sortieren und ausgeben AWT, Swing, JavaFX & SWT 50
maximizer JavaFX Accordion mit eigenen TitledPanes füllen AWT, Swing, JavaFX & SWT 0
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
G LookAndFeel Tutorial für Erstellung eines eigenen Look And Feel AWT, Swing, JavaFX & SWT 3
S Swing Eigenen Button schreiben AWT, Swing, JavaFX & SWT 6
B Eigenen Look&Feel erstellen?! AWT, Swing, JavaFX & SWT 2
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
Z andere Programmfenster relativ zum eigenen maximieren AWT, Swing, JavaFX & SWT 4
B Swing Eigenen Cursor setzen AWT, Swing, JavaFX & SWT 10
J Eigenen Parser schreiben AWT, Swing, JavaFX & SWT 8
N Swing eigenen Dialog erstellen AWT, Swing, JavaFX & SWT 8
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
M JTree mit eigenen Knoten - Zugriff auf Daten AWT, Swing, JavaFX & SWT 6
E Eigenen RowSorter AWT, Swing, JavaFX & SWT 11
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
S Swing editable JCombobox mit eigenen Einträgen manangen AWT, Swing, JavaFX & SWT 5
S AWT Eigenen Cursor im Frame verwenden... AWT, Swing, JavaFX & SWT 5
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
GilbertGrape ActionListener implementieren oder Eigenen für jede Komponente? AWT, Swing, JavaFX & SWT 9
G Hilfe beim Erstellen eines eigenen Html-Editors! AWT, Swing, JavaFX & SWT 4
C JScrollpane eigenen jScrollBar einfügen AWT, Swing, JavaFX & SWT 2
D Darstellungsproblem des eigenen TreeModel bei Veränderungen AWT, Swing, JavaFX & SWT 7
G eigenen Observer schreiben AWT, Swing, JavaFX & SWT 6
J Drag & Drop : JLabel -> JLabel (eigenen Datentyp über AWT, Swing, JavaFX & SWT 2
S JTree mit eigenen Objekten füllen AWT, Swing, JavaFX & SWT 4
isowiz Einige Fragen zur ersten eigenen Sing-Applikation AWT, Swing, JavaFX & SWT 4
M Symbole beim eigenen Renderer AWT, Swing, JavaFX & SWT 7
F Eigenen JDialog öffnen? AWT, Swing, JavaFX & SWT 4
J JFrame mit eigenen Button minimieren AWT, Swing, JavaFX & SWT 2
N Methode für Bild laden geht nur in der eigenen Klasse... AWT, Swing, JavaFX & SWT 3
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22

Ähnliche Java Themen

Neue Themen


Oben