java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > AWT, Swing & SWT

AWT, Swing & SWT Themen zur Programmierung von Benutzer-Oberflächen (GUI) sowie zur Grafikprogrammierung (2D / 3D)

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 15.03.2006, 12:24   #1 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 15.03.2006
Beiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Problem, neuen JInternalFrame zur Laufzeit anzuzeigen

Hallo @all!
Ich habe ein Problem, und zwar habe ich einen JFrame (Klasse A), der eine DesktopPane besitzt.
Auf dieser Desktop-Pane habe ich einen InternalFrame (Klasse B). Bei einem bestimmten Ereignis in B soll ein zweiter InternalFrame (Klasse C) erzeugt und auf dem DesktopPane von Klasse A angezeigt werden.
Hierfür besitzt Klasse A eine Methode addWindow(C einFenster), welche das Fensterobjekt der DesktopPane von A hinzufügt.
Code:
public void addWindow(C child)
	{
		jDesktopPane.add(child);
		jDesktopPane.revalidate();
	}
Funktioniert nur leider nicht; das neue Fenster wird zwar vor dem Methodenaufruf erzeugt und übergeben, aber nicht angezeigt... Warum?
Liegt das Problem eventuell darin, dass ich die DesktopPane verändere nachdem ich sie dem Fenster A als Content Pane zugewiesen hab. Wenn ja was muss ich tun damit es funktioniert?
Sirlizium ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.03.2006, 14:40   #2 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Beiträge: 7.403
Blog-Einträge: 9
Abgegebene Danke: 6
Erhielt 86 Danke für 82 Beiträge
Wie wird denn das Kind gezeugt?
Etwa so?:
Code:
       child = new JInternalFrame();
        child.setVisible(true);//<--- WICHTIG für die Geburt!
        child.setBounds(90, 60, 270, 170);
__________________
Lerne anzuhalten -- oder nichts lohnendes kann dich erreichen.
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 13:24   #3 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 15.03.2006
Beiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Ja, so in etwa...

Code:
(...)
A.addWindow(new C());
(...)

// und im Konstruktor von C:
(...)
    this.setVisible(true);
Wenn ich das Exemplar von C -probehalber- bei der Initialisierung von A erzeuge und hinzufüge, dann wird es auch angezeigt, nur eben nicht wenn ich es zur Laufzeit anzeigen will.

Bounds sind auch so gesetzt, dass man es eigentlich sehen müsste.
Sirlizium ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 13:41   #4 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Beiträge: 7.403
Blog-Einträge: 9
Abgegebene Danke: 6
Erhielt 86 Danke für 82 Beiträge
Vielleicht muss da noch'n validate() hin...
__________________
Lerne anzuhalten -- oder nichts lohnendes kann dich erreichen.
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 14:08   #5 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 15.03.2006
Beiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
validate() hab ich schon an allen möglichen Stellen ausprobiert, hilft leider nicht :-\

Ist es vielleicht ein Problem, dass das Fenster durch eine andere Klasse erzeugt wird, als die, welche das Fenster anzeigen soll? (da das fenster ja als Objekt beim Methodenaufruf übergeben wird)... eigentlich nicht oder?
Sirlizium ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 14:46   #6 (permalink)
Java-Forum Team
Site Operator
 
Benutzerbild von L-ectron-X
 
Registriert seit: 24.04.2004
Beiträge: 9.311
Abgegebene Danke: 5
Erhielt 94 Danke für 94 Beiträge
JInternalFrames werden ausnahmsweise mit show() angezeigt.
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JInternalFrame.html#show()
__________________
Schöne Grüße,
L-ectron-X

Programmieren lernt man nur durch programmieren.

www.java-forum.org - Java programmieren aus Leidenschaft
www.byte-welt.de - Die Welt des Programmierens

"Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."
L-ectron-X ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 15:18   #7 (permalink)
Stammbenutzer
CD-R 80
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Beiträge: 7.403
Blog-Einträge: 9
Abgegebene Danke: 6
Erhielt 86 Danke für 82 Beiträge
Code:
/*
 * KlasseA.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KlasseA extends JFrame {
    public KlasseA() {
        super("Frame A");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        
        jDesktopPane = new JDesktopPane();
        getContentPane().add(jDesktopPane, BorderLayout.CENTER);
        B frameB = new B(this);
        addWindow(frameB);
    }
    public void addWindow(B child) {
        jDesktopPane.add(child);
    }
    public void addWindow(C child) {
        jDesktopPane.add(child);
    }
    public static void main(String args[]) {new KlasseA().setVisible(true);}
    private JDesktopPane jDesktopPane;
}
class B extends JInternalFrame{
    public B(KlasseA parent){
        this.parent = parent;
        setTitle("Frame B");
        setVisible(true);
        setBounds(40, 40, 160, 100);
        JButton frameC_Btn = new JButton("Frame C anzeigen");
        frameC_Btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                frameC_BtnActionPerformed(evt);
            }
        });
        add(frameC_Btn, BorderLayout.NORTH);
    }
    private void frameC_BtnActionPerformed(ActionEvent evt){
        C frameC = new C();
        parent.addWindow(frameC);
    }
    private KlasseA parent;
}

class C extends JInternalFrame{
    public C(){
        setTitle("Frame C");
        setVisible(true);
        setBounds(40, 170, 160, 100);
    }
}
__________________
Lerne anzuhalten -- oder nichts lohnendes kann dich erreichen.
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 15:31   #8 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 15.03.2006
Beiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Habe das Problem gelöst!!!

Es lag nicht an der Methode selbst, sondern ich hab durch einen falschen Aufruf in der main() die ganze Zeit ungewollt zwei identische Hauptfenster gehabt. Nur eines davon war sichtbar, und die neuen InternalFrames wurden die ganze Zeit im unsichtbaren zweiten Fenster angezeigt :-\

Wen's interessiert:
Habe das Singleton-Entwurfsmuster eingesetzt, um von überall auf ein- und dasselbe Fenster zugreifen zu können.

Code:
class A extends JFrame
{
 private static A instance = null;

 public static A getInstance()
{
    if (instance == null)
    {
        instance = new A();
        // (...) Initialisieren von A
    }
 return instance;
}
Mein Fehler: ich habe das Fenster in der main-Methode nicht mit getInstance() geholt, sondern mit new A(), was zur Folge hatte, dass beim Starten zuerst ein neues Fenster-Objekt erzeugt wurde, und dann beim ersten Aufruf von getInstance() ein zweites, verstecktes Fenster erzeugt wurde.

Danke Euch trotzdem für die Ratschläge
Sirlizium ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 16.03.2006, 15:38   #9 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 15.03.2006
Beiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
@André:
Danke für die Mühe es extra auszuprobieren. Auch wenn sich mein Problem als was anderes herausgestellt hat

Funktioniert übrigens auch prima, wie bei mir jetzt auch

Thx
Sirlizium ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit erzeugen eienr neuen Session habeKA Allgemeine Java-Themen 3 03.09.2008 10:31
BufferedImage & Scaling: Altes Problem im neuen Gewand Steve™ AWT, Swing & SWT 2 04.02.2008 14:52
Erzeugung von neuen Komponeten zur Laufzeit (mit Matisse) Jessi27 AWT, Swing & SWT 0 27.09.2007 10:03
Problem beim erstellen eines neuen Elements (JDOM) Paladin XML und Co. 5 12.09.2005 14:04
Problem beim Button erstellen in einem Neuen Frame Java Basics - Anfänger-Themen 1 25.04.2004 19:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:16 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de