Darstellungsproblem mit Dialog

VfL_Freak

Top Contributor
Moin,

ich habe derzeit ein ganz seltsames Problem mit einem von JDialog abgeleiteten eigenen Dialog-Klasse.

Ziel: einen übergebenen Text in einem halbtransparenten Fenster für eine bestimmte Zeit anzuzeigen
hierzu wird in den Dialog ein Panel gelegt und hierein ein Label mit dem Text

Hier die Klasse:
Java:
package com.gselectronic.worker.gui;

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

/********************************************************************
 * Erzeugt ein transparentes Fenster zur Anzeige der Alarmverzögerung 
 * Beschreibung: Worker-Client
 * Autor: nn
 ********************************************************************/

public class ShowDelayTransparency
	extends JDialog 
{
	private static final long serialVersionUID = 1L;

	Frame parentFrame = null;
	JPanel pnMain = null;
	JLabel lblVerzoegerung = null;
	
	
	/**
	 * Konstruktor mit Parameter
	 * @param frame Der aufrufende Frame
     * @param text Zahl der Verzögerung
	 */
	public ShowDelayTransparency( Frame frame, String text )
	{
		super( frame, "Alarm-Verzögerung", false );

		parentFrame = frame;
		
		pnMain = new JPanel();
		setBackground( Color.WHITE );

		lblVerzoegerung = new JLabel();
		lblVerzoegerung.setBounds( new Rectangle(0,0,750,400) );

		// -----------------------------------------------------------------------------
		// verfügbare Schriftgröße des Label berechnen
		Font labelFont = lblVerzoegerung.getFont();
		int stringWidth = lblVerzoegerung.getFontMetrics(labelFont).stringWidth( text );
		int componentWidth = lblVerzoegerung.getWidth();
		int componentHeight = lblVerzoegerung.getHeight();

		// Find out how much the font can grow in width.
		double widthRatio = (double)componentWidth / (double)stringWidth;

		int newFontSize = (int)(labelFont.getSize() * widthRatio);

		// Pick a new font size so it will not be larger than the height of label.
		int fontSizeToUse = Math.min( newFontSize, componentHeight );

		// Set the label's font size to the newly determined size.
		Font font = new Font( "Arial", Font.BOLD, fontSizeToUse );
		lblVerzoegerung.setFont( font );
		// -----------------------------------------------------------------------------

		lblVerzoegerung.setOpaque( true );
		lblVerzoegerung.setVerticalAlignment( SwingConstants.CENTER );
		lblVerzoegerung.setHorizontalAlignment( SwingConstants.CENTER );
		lblVerzoegerung.setBackground( Color.WHITE );
		lblVerzoegerung.setForeground( Color.BLACK );
		lblVerzoegerung.setText( text );

		setResizable( false );
		
		pnMain.setPreferredSize( new Dimension(850,350) ); 
		pnMain.setLayout( new BorderLayout() );
		pnMain.setOpaque( false );
		pnMain.add( lblVerzoegerung, BorderLayout.CENTER );
		getContentPane().add( pnMain );

		com.sun.awt.AWTUtilities.setWindowOpacity( this, 0.3f );

		setAlwaysOnTop( true );
		
		if (parentFrame != null) 
		{
			Dimension dlgSize = getPreferredSize();
			Dimension parentfrmSize = parentFrame.getSize();
			Point parloc = parentFrame.getLocation();
			setLocation( (parentfrmSize.width - dlgSize.width) / 2 + parloc.x, (parentfrmSize.height - dlgSize.height) / 2 + parloc.y);
		}

		pack();
	} // ShowDelayTransparency
	
	
	
// ########################################	
// überschriebene Methoden der Super-Klasse
// ########################################	
	public void componentResized(ComponentEvent e) 
	{
		// überschrieben
	}

	public void componentMoved(ComponentEvent e) 
	{
		// überschrieben
	}

	public void componentShown(ComponentEvent e) 
	{
		// überschrieben
	}

	public void componentHidden(ComponentEvent e) 
	{
		// überschrieben
	}
} // class ShowDelayTransparency

Der Aufruf im Programm:
Java:
{
// transparentes Fenster zur Anzeige der Alarmverzögerungszeit 
ShowDelayTransparency sdtAlarmVerzoegerung = null;  // globale Varibale
// ...
// this = der parentFrame; sAlarmVerzoegerung Sting mit der Verzögerungszeit in sec., Bsp."512"
sdtAlarmVerzoegerung = new ShowDelayTransparency( this, sAlarmVerzoegerung );
sdtAlarmVerzoegerung.setVisible( true );
} // dieser Block symbolisiert den Timer, in dem das Ganze zyklisch abläuft

// ...

// ggf. an mehreren anderne Stellen, je nach Programmablauf
sdtAlarmVerzoegerung.dispose();
sdtAlarmVerzoegerung = null; // inzwischen hinzugefügt, da anderfalls hier "sdtAlarmVerzoegerung" noch nicht wirklich null zu sein scheint

Erwarte habe ich, dass nun ein ein entsprechender Dialog aufgeht, in dem die übergebene Zahl dargestellt wird.

Im Prinzip klappt das auch wunderbar !

Nur habe ich folgendes Problem im Ablauf:
nach dem "setVisible" sieht man zunächst einen leeren Dialog (noch mit der systemeigenen Hintergrundfarbe GRAY, dann wird der Hintergrund weiß und es wird ganz kurz der letzte, zuvor angezeigte Wert dargestellt, ehe dann der eigentliche übergebene Wert kommt.
Das passiert sogar nach dem Neustart des Programm !! :bahnhof:

Im Debugger sehe ich vor dem "setVisible", dass der richtige Wert auf dem Label steht.
Weiterhin habe ich mittlerweile nach dem dispose das "Setzen auf null" hinzugefügt, um sicher zu sein, dass das Objekt vor dem Aufruf des Konstruktor auch wirklich null ist .....

Es gibt in der Anwendung div. weitere Dialoge, die im Prinzip genau so dargestellt werden, allerdings ohne die Klasse "ShowDelayTransparency". Hierbei tritt das Problem augenscheinlich nicht auf ....

Nur - wo kommt der alte Wert her?
Vor allem nach einem Programm-Neustart?
Wird hier iregndwo etwas gecacht? Wenn ja: wo und wie kann ich das verhindern?

Vielleicht sollte ich noch dabei sagen, dass ich den Code der Klasse von einem Kollegen bekommen habe, nur nur ein wenig auf meine Belange angepasst habe.

Würde mich über Tipps freuen!

Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

gute Frage .... war so drin - vermutllich, weil unsprünglich von JFrame abgeleitet wurde, da mussten die zwingend überschrieben werden.

Habe alle vier Methoden jetzt mal rausgenommen und dann erneut getestet, ändert aber leider nichts ;(

Gruß
Klaus

[EDIT]
Vielleicht sollte ich auch noch erwähnen, dass es bei der nicht-opaken Darstellung genau so ist !
[/EDIT]
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ist es möglich das in einem KSKB darzustellen?

Hinweis: Bei mittiger Postionierung des Dialogs über dem Frame hilft
Code:
setLocationRelativeTo(frame)
. Damit spart man sich die Berechnung und falls
Code:
frame==null
wird der Dialog einfach mittig auf dem Bildschirm angezeigt.
 

VfL_Freak

Top Contributor
Moin Michael,

Ist es möglich das in einem KSKB darzustellen?
Muss ich mal schauen, ob ich das hinbekomme. Leider ist die aufrufende Klasse mein mainFrame und breits fast 30000 Zeilen groß.
Kann ich aber eh' erst am Montag versuchen, da ich heute nicht mehr in die Firma komme und zu Hause keine Sourcen habe.

Hinweis: Bei mittiger Postionierung des Dialogs über dem Frame hilft
Code:
setLocationRelativeTo(frame)
. Damit spart man sich die Berechnung und falls
Code:
frame==null
wird der Dialog einfach mittig auf dem Bildschirm angezeigt.
Ja, ich weiß, hatte ich auch erst drin. Nur gibt es bei uns ein Reihe von Arbeitsplätzen (auch bei meinem Chef), die bis zu drei Monitore angeschlossen haben. Und wenn er nun irgendwann das Hauptfenster des Programms auf einen anderen als den ersten Monitor schiebt, dann will er natürlich dieses aufpopende opake Fenster weiterhin zentriert auf diesem Monitor sehen und nicht weiterhin auf dem, bei dem das Programm gestartet wurde .....

Schönes WE!
tschüss
Klaus
 

Michael...

Top Contributor
Muss ich mal schauen, ob ich das hinbekomme.
Wäre halt hilfreich. Mir selbst ist das Phänomen noch nicht untergekommen.
Ja, ich weiß, hatte ich auch erst drin. Nur gibt es bei uns ein Reihe von Arbeitsplätzen (auch bei meinem Chef), die bis zu drei Monitore angeschlossen haben. Und wenn er nun irgendwann das Hauptfenster des Programms auf einen anderen als den ersten Monitor schiebt, dann will er natürlich dieses aufpopende opake Fenster weiterhin zentriert auf diesem Monitor sehen und nicht weiterhin auf dem, bei dem das Programm gestartet wurde .....
Der Dialog wird doch immer mittig über dem Frame angezeigt, egal auf welchem Monitor der Frame ist?
 

VfL_Freak

Top Contributor
Moin,

ja, mit dem KSKB wird das derzeit nix, da sich die Prioritäten von meinem Chef schon wieder verschoben haben ... :(

Na ja, dann muss er da erst mal so mit leben .....

Danke und Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

Was mir noch auffällt ist dass der Code eine Exception wirft, weil dein Dialog nicht undecorated ist. (Java 7)
hmm ... wir haben hier nur einen einzigen Test-Rechner mit Java7 laufen (sonst nur Java6) und dort tritt keine Exception auf :bahnhof:

Aber Danke für den Hinweis, werde ich mal in Auge behalten !

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JSF Darstellungsproblem AWT, Swing, JavaFX & SWT 0
H Swing Darstellungsproblem JPanel in JPanel in JScrollpane in JSplitPane AWT, Swing, JavaFX & SWT 4
heart_disease Darstellungsproblem mit JTable AWT, Swing, JavaFX & SWT 4
D Darstellungsproblem des eigenen TreeModel bei Veränderungen AWT, Swing, JavaFX & SWT 7
G Darstellungsproblem mehrerer Komponenten AWT, Swing, JavaFX & SWT 9
S Darstellungsproblem mit JButton AWT, Swing, JavaFX & SWT 3
H Darstellungsproblem mit Kartenspiel AWT, Swing, JavaFX & SWT 3
V Darstellungsproblem mit Canvas AWT, Swing, JavaFX & SWT 6
MiHimbert Rückmeldung an den aufrufenden JAVAFX-Dialog AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
melaniemueller Confirmation Dialog erstellen AWT, Swing, JavaFX & SWT 18
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
E Swing Dialog modal aufrufen AWT, Swing, JavaFX & SWT 2
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
J JavaFX Dialog - Style AWT, Swing, JavaFX & SWT 6
D Swing Dynamisches Dialog UI AWT, Swing, JavaFX & SWT 8
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
D Neues Dialog Mittig auf dem Bildschirm AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Grafikproblem nach Aufruf von JColorChooser-Dialog AWT, Swing, JavaFX & SWT 6
M Java FX Innerhalb einem FXML-Dialog weiteren FXML-Dialog einblenden AWT, Swing, JavaFX & SWT 3
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
M Benutzer-Dialog ohne System.in/out AWT, Swing, JavaFX & SWT 2
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
F Dialog mit Titel, Text und Ok Button AWT, Swing, JavaFX & SWT 2
TheWhiteShadow SWT Dialog Titel setzen AWT, Swing, JavaFX & SWT 6
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
G Nebenläufiger Prozess mit Dialog AWT, Swing, JavaFX & SWT 2
C Swing Fortschrittsanzeige im Dialog ohne Fortschrittsbalken und Abbruchoption AWT, Swing, JavaFX & SWT 7
M Swing Elemente im Dialog neu "laden". AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
R DnD in modalem Dialog AWT, Swing, JavaFX & SWT 4
I Dialog zum Speichern? AWT, Swing, JavaFX & SWT 16
M Dialog soll etwas an "Oberklasse" übergeben AWT, Swing, JavaFX & SWT 3
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
N Modaler Dialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
J SWT Dialog in Dialog automatisch öffnen AWT, Swing, JavaFX & SWT 19
H Confirm Dialog erweitern AWT, Swing, JavaFX & SWT 5
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
B Gestaltung eines Optionen-Dialog AWT, Swing, JavaFX & SWT 16
P Swing Option zeitbeschränkt in modalem Dialog anbieten AWT, Swing, JavaFX & SWT 2
X Einem JFrame einen Dialog als Parent setzen. Möglich? AWT, Swing, JavaFX & SWT 4
L AWT Window, Dialog und verschiedene Betriebssysteme AWT, Swing, JavaFX & SWT 2
T SWT Window Builder Pro File Dialog anzeigen AWT, Swing, JavaFX & SWT 10
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
P Swing modaler dialog AWT, Swing, JavaFX & SWT 3
P SWT Dialog AWT, Swing, JavaFX & SWT 3
O Login Dialog zweimal öffnen AWT, Swing, JavaFX & SWT 2
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
N Swing eigenen Dialog erstellen AWT, Swing, JavaFX & SWT 8
C Swing Fehlermeldung in einem Dialog anzeigen AWT, Swing, JavaFX & SWT 2
L Dialog mit Dauerschleifen AWT, Swing, JavaFX & SWT 4
K SWT TableViewer refresh() im Dialog AWT, Swing, JavaFX & SWT 2
Semox Swing FileSaveAs Dialog Problem AWT, Swing, JavaFX & SWT 14
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
B Dialog aus DB Struktur erstellen AWT, Swing, JavaFX & SWT 4
D URL Dialog AWT, Swing, JavaFX & SWT 2
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
J nicht weckklickbarer dialog AWT, Swing, JavaFX & SWT 15
S Frame - Panel - Dialog rückgabe wert AWT, Swing, JavaFX & SWT 5
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
F JColorChooser NICHT im Dialog AWT, Swing, JavaFX & SWT 12
C Swing Mit jTree ein Ordneröffnen Dialog machen? Und Ordner Inhalt auslesen? AWT, Swing, JavaFX & SWT 4
N SWT Dialog mit swt-widgets AWT, Swing, JavaFX & SWT 5
L AWT Daten vom Dialog an Frame senden AWT, Swing, JavaFX & SWT 3
Lurch Swing Dialog erbt von Dialog? AWT, Swing, JavaFX & SWT 28
eQuest Durchsuchen Dialog AWT, Swing, JavaFX & SWT 6
D ausgewählte Textstellen scheinen durch Dialog durch AWT, Swing, JavaFX & SWT 7
S Modalen Dialog nachbauen..? AWT, Swing, JavaFX & SWT 4
E Swing Rückgabe eines Wertes aus einem Dialog zu einem Dialog AWT, Swing, JavaFX & SWT 4
W Swing Problem beim Passwort Dialog AWT, Swing, JavaFX & SWT 4
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
C requestFocus bei modalem Dialog AWT, Swing, JavaFX & SWT 3
5 Mod.Dialog reagiert n.auf ActionListener seiner Komponenten AWT, Swing, JavaFX & SWT 4
A Bitte warten Dialog AWT, Swing, JavaFX & SWT 4
G SWT Dialog AWT, Swing, JavaFX & SWT 7
GilbertGrape EXIT_ON_CLOSE in Dialog AWT, Swing, JavaFX & SWT 3
T JFileChooser: beim Save Dialog einen Dateinamen vorgeben? AWT, Swing, JavaFX & SWT 6
K Druck-Dialog AWT, Swing, JavaFX & SWT 4
D JTable nach Öffnen-Dialog umbaun AWT, Swing, JavaFX & SWT 5
K Dialog schliesst sich nicht. Warum? AWT, Swing, JavaFX & SWT 11
K Automatisch einen Dialog schliessen AWT, Swing, JavaFX & SWT 15
J dialog AWT, Swing, JavaFX & SWT 5
H nicht modaler Dialog verdeckt modalen Dialog AWT, Swing, JavaFX & SWT 5
S Probl. bei Java Programm - Dialog zum Bearbeiten von Bildern AWT, Swing, JavaFX & SWT 4
W Wie macht man so nen Settings Dialog AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben