Komponenten im JDialog werden nicht erneut gerendert

Status
Nicht offen für weitere Antworten.
T

tommy44

Gast
Hallo Leute,

ich habe folgendes Problem:

mit dem Öffnen des Hauptframes (JFrame) meines Programms öffnet sich auch ein JDialog (nennen wir ihn MeldungDlg), auf dem per GridBagLayout verschiedene Komponenten angeordnet sind. Unter anderem auch eine JTable.

In einer Zelle der JTable befindet sich ein Listener, der einen weiteren JDialog (ÄnderungDlg) aufruft. Wenn dieser neue über eine darauf befindliche Schaltfläche "Schließen" wieder geschlossen wird, wird der alte wieder sichtbar. Dieser wird allerdings nicht mehr ordentlich dargestellt. Sowohl das JScrollpane, das die JTable beinhaltet, als auch die Buttons werde nicht mehr dargestellt und erscheinen erst, wenn ich mit der Maus draufklicke oder irgendwie mit ihm interagiere.

Beide Dialoge sind nicht modal und sollen das auch nicht werden.

Also nochmal zur Zusammenfassung:

Hauptframe(JFrame) -> Aufruf MeldungDlg(Hauptframe, nicht modal) -> Aufruf ÄnderungDlg(Hauptframe, nicht modal)
-> Schließen des ÄnderungDlg, MeldungDlg bekommt wieder den Fokus, zeigt aber seine Buttons und sein JScrollPane nicht mehr an.

Wenn ich die JTable aus dem MeldungDlg rausnehme, funktioniert es komischerweise, also irgendwie muss es an ihr liegen?!

Der ÄnderungDlg wird übrigens über dispose() geschlossen.
Ich hab auch schon Sachen wie MeldungDlg.this.repaint() und validate() im Anschluss an die Schließung von ÄnderungDlg versucht, alles ohne Erfolg. Auch Änderungen der modal-Werte oder eine Deklaration des MeldungDlg als JFrame, statt als JDialog bringen nichts.

Ich bin ratlos.

Weiß da jemand weiter? Hoffe, meine Beschreibung reicht, ansonsten einfach fragen.

Danke im Voraus
 
G

Guest

Gast
Ein Beispiel? Hab ich doch oben beschrieben. Viel mehr gibt es da glaub ich nicht zu sagen :p

Code kann ich morgen früh erst wieder posten, bin jetzt nicht an entsprechendem Rechner.
 

Ebenius

Top Contributor
Anonymous hat gesagt.:
Ein Beispiel? Hab ich doch oben beschrieben. Viel mehr gibt es da glaub ich nicht zu sagen :p
Da hab ich mich wohl ungünstig ausgedrückt. Ich meinte: Mach mal ein kurzes Code-Beispiel bei dem das passiert und poste es. :)
 
K

kroko

Gast
Probier mal revalidate() auf der Component oder auf dem Parentcontainer.
Sowas hatte ich auch mal und konnte es so lösen ...
 
T

tommy44

Gast
Moin,

revalidate() hab ich auch schon versucht. Kein Erfolg.

Also, aus dem Hauptframe f (extends JFrame) wird folgendes aufgerufen:
Code:
MeldungenDlg mdlg = new MeldungenDlg(f);
mdlg.setVisible(true);

Einiges aus MeldungenDlg: (extends JDialog)
Code:
public MeldungenDlg (JFrame frame)
	{
		super(frame, false);
		this.frame=frame;     // wird weiter unten für den ÄnderungDlg benötigt
		initDlg();                   // Eigenschaften des Dialogs
		putComponents();     // Komponenten werden draufgesetzt
	}

private void initDlg() 
	{
		setBounds(100, 100, 800, 500);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		GridBagLayout gbl = new GridBagLayout();
		setLayout(gbl);
		setTitle("Meldungen");
	}

private void putComponents()
	{
		Container cont=getContentPane();
		
		//"Schließen" - Button
		JButton schl = new JButton("Schließen", new ImageIcon("...exit.gif"));
                /*Methode zum Platzieren der einzelnen Komponenten mit GridBagLayout*/
		addComponent(cont, schl, 4, 7, 1, 1, 1.0, 0.0, GridBagConstraints.SOUTHEAST,
						GridBagConstraints.NONE, new Insets(0,0,20,30));           
		
		ActionListener al1 = new ActionListener() {
			public void actionPerformed(ActionEvent e) {dispose();}};
		schl.addActionListener(al1);

//......viele andere Komponenten.......

                //Meldungs-Tabelle
		JTable meldtab = new JTable();
		tsp = new JScrollPane(meldtab);
                //stark gekürzt

                addComponent(cont, tsp, 0, 1, 5, 6, 2.0, 2.0, GridBagConstraints.CENTER,
				GridBagConstraints.BOTH, new Insets(0,30,20,30));
Der Listener auf der Tabelle, der den 2. Dialog öffnet:
Code:
                MouseListener ml = new MouseAdapter()
		{
			@Override
			public void mouseClicked(MouseEvent me)
			{
				int row = ((JTable) me.getComponent()).rowAtPoint(me.getPoint());
				int col = ((JTable) me.getComponent()).columnAtPoint(me.getPoint());

				if ((col == 2) && (((JTable) me.getComponent()).getValueAt(row, 3)=="Offen"))
				{
					((JTable) me.getComponent()).setValueAt("Erledigt",row,3);
					System.out.println("DIALOG ÖFFNET");
					ÄnderungDlg.execute(frame);             // ÄnderungDlg wird geöffnet
					/* An dieser Stelle habe ich repaint() und Ähnliches versucht. Macht hier aber nur 
                                         * Sinn, wenn der ÄnderungDlg modal ist, sonst wird es zu früh aufgerufen. Funktioniert
                                         * hat es mit einem modalen aber trotzdem nicht.
                                         */
					System.out.println("DIALOG GESCHLOSSEN");
				}
			}
		};
		
		meldtab.addMouseListener(ml);
Der ÄnderungDlg: (extends JDialog)
Code:
public static synchronized void execute( JFrame f )
    {
        if (theLock == false)
        {
            theLock = true;
            new DlgDienstplan( f ).setVisible( true );
        }
    }

private DlgDienstplan( JFrame f )
    {
        super( f, false );
        //.........
     }
Wichtig ist jetzt eigentlich nur noch der Listener auf den "Schließen"-Button auf dem ÄnderungDlg:
Code:
private void jButtonBeenden_actionPerformed( ActionEvent e )
    {  
        merkeZuletztGeaendertes();
        dispose();
        theLock = false;
    }

Ich hoffe, das hilft in irgendeiner Weise.. Sorry für die Kürzungen, aber das Programm ist sehr komplex...
 

Ebenius

Top Contributor
Hmm... Tut mir leid, wenn das jetzt Arbeit macht, aber das hilft mir leider nicht sehr. Kannst Du nicht die beiden Klassen kopieren und aus der Kopie alles rausschmeißen was kompliziert ist. So klein wie möglich, selbstständig und ausführbar. Dann kann ich auf die Suche gehen.

Falls das nicht funktioniert, dann kannst Du auch die Quellen in ein JAR oder Zip packen, in deine Eigenen Dateien werfen und den Link hier einstellen...

Ebenius
 
T

tommy44

Gast
Also....
ich hab das Problem ein bisschen eingegrenzt. Es liegt definitiv an dem Renderer für die 2. Spalte meiner Tabelle... Ohne ihn funktioniert es. Wahrscheinlich weil es ihn immer wieder durchläuft und das zu viel ist? Keine Ahnung, hier mal der Renderer:
hier wird er für Spalte 2 festgelegt:
Code:
TableColumnModel tcm = meldtab.getColumnModel(); //meldtab ist die Tabelle
tcm.getColumn(1).setCellRenderer( new TextAreaRenderer(AlleReihen().length) );

Hier der Renderer:
Code:
public class TextAreaRenderer extends JTextArea implements TableCellRenderer
{
	private int rows;

	public TextAreaRenderer (int rows)
	{
		super();
		this.rows=rows;
	}

	public Component getTableCellRendererComponent(JTable table,
			Object value, boolean isSelected, boolean hasFocus,
			int row, int column) 
	{
		if (value instanceof StringBuilder && value != null)
		{
			setLineWrap(true);
			setWrapStyleWord(true);
			setText(value.toString());
			setFont(table.getFont());
			table.setRowHeight(row, ((value!=null) ? ((rows) * 17) : 17));
		}
		
		else if (value instanceof String)
		{
			setFont(table.getFont());
			setText(value.toString());
		}

		if (table.getValueAt(row, 3)=="Offen") setForeground(Color.RED);
		else setForeground(Color.BLACK);
		return this;
	}

}

Der Stringbuilder-Wert, den er in der Zelle darstellen muss, ist ein Textfeld aus ca. 20 Zeilen. Vorerst gibt es testweise erst eine Reihe.

Was ist denn hier jetzt das Problem?! :?[/code]
 
T

tommy44

Gast
Komisch, dass keiner der "Experten" hier das relativ offensichtliche Problem erkannt hat...

Also für andere mit evtl. demselben Problem:

Es lag an "setRowHeight" im Renderer.
Durch diese Änderung hat der Renderer ein Event ausgeworfen, dass die Tabelle neu rendert, er hat sich also quasi wieder selber aufgerufen und dadurch eine Endlosschleife erzeugt, die natürlich die GUI festfahren ließ.

MFG, Tommy
 

Ebenius

Top Contributor
tommy44 hat gesagt.:
Komisch, dass keiner der "Experten" hier das relativ offensichtliche Problem erkannt hat...
Ich hatte einfach nur Wochenende und war unterwegs. :) Schön, dass Du das Problem gefunden und die Lösung beschrieben hast.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JDialog zeigt keine Komponenten wenn es modal ist AWT, Swing, JavaFX & SWT 2
M JDialog in for-Schleife mit Komponenten bestücken AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
H Komponenten anwendugsweit formatieren AWT, Swing, JavaFX & SWT 6
M Swing Komponenten mit fester Größe an Fensterrand(JFrame) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben