Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > Teile eines Layouts variabel halten
Antwort
 
Themen-Optionen
Alt 10.02.2006, 12:57   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard Teile eines Layouts variabel halten

Hallo,
ich möchte gerne Folgendes realisieren.

Ich habe ein Applet, welches in drei Teile eingeteilt ist.
Diese Einteilung erreiche ich durch dieses GridBagLayout
PHP-Code:
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill GridBagConstraints.HORIZONTAL;

        
gbc.weightx   0.5;
gbc.weighty   1;
gbc.gridx     0;
gbc.gridy     1;
gbc.ipady     460;
gbc.ipadx     200;
this.add(PANEL_WELCHES_GETAUSCHT_WERDEN_SOLLgbc);

gbc.gridx     1;
gbc.gridy     1;
gbc.ipadx     600;
this.add(FLIPPERPANELgbc);

gbc.weightx   0.0;
gbc.gridwidth 3;
gbc.gridx     0;
gbc.gridy     0;
gbc.ipady     20;
gbc.ipadx     800;
this.add(CONTROLPANELgbc); 
Nein, das sind keine Konstanten. Ich habe das nur einfach mal so hingeschrieben, weil ich denke, dass das so selbsterklärend ist.

Ich möchte nun also das linke Panel variabel machen.
Beim Start des Applets soll PANEL_EINS angezeigt werden und nachdem dort ein Button angeklickt wurde soll PANEL_ZWEI angezeigt werden.

Hm. Ich weiß jetzt aber gerade nicht, wie ich das am besten "designe".
Wäre über Tipps dankbar.

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2006, 15:15   Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Gib dem Panel nen CardLayout und pack die beiden anderen Panel da rein.

P.S.: Mach dein Leben einfacher, lern EGBConstraints
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2006, 17:26   Nach oben    #3
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Ich verstehe jetzt nicht wirklich, wie mich das weiterbringen sollte ..
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2006, 18:59   Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

http://java.sun.com/docs/books/tutor...yout/card.html

Das sollte dir doch helfen, oder? Der andere Link bezog sich nur auf den häßlichen GridBagLayout-Code.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2006, 19:06   Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Interessant .. aber steht an dieser Stelle hier mal nicht zur Debatte.
Klare Frage: Kannst Du meine Frage beantworten?

Wenn ja (was ich ehrlich gesagt glaube!), dann wäre ich erfreut.
Wenn nein, einfach nichts schreiben.

Ich frag schon nach LayoutManagern etc., wenn die Zeit dazu gekommen ist!

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.02.2006, 10:12   Nach oben    #6
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Ähm... ok. In dem Fall habe ich wohl die Frage falsch verstanden.

Wo, wenn nicht da, ist das Problem?

Zitat:
Hm. Ich weiß jetzt aber gerade nicht, wie ich das am besten "designe".
Das da kann doch kein Problem sein, oder? Oder willst dir unbedingt ein Problem machen, wo keines ist, indem du es komplizierter machst, als es ist?

Diese Layout, dass ich verlinkt habe, zeigt nur eine Komponente an und es ist spielend leicht möglich, damit das zu realisieren, was du vorhast. Nämlich, nach klick auf einen Button, eine andere Komponente anzuzeigen.

Dem Button gibste einfach nen ActionListener, der das macht und gut ist.

Hättest du jetzt gesagt, die Anzahl der Panel, die dort angezeigt werden sollen, ist variabel, dann wäre das was anderes, aber so ist das doch eigentlich völlig klar.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 12:01   Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Hi danke,
war ein paar Tage nicht online, deshalb erst jetzt die Antwort.

Ich werde mir gleich mal das CardLayout anschauen .. und weil Dir zuliebe in Kürze (in ein paar Tagen) auch mal den Blogeintrag. *gg*

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 13:34   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Sorry für das Doppelposting, aber ich wollte nochmal auf mich aufmerksam machen.

Also. Ich möchte noch kurz erläutern, warum ich in diesem Forum poste und nicht im Fachforum für GUI-Programmierung mit Java.
Ich habe irgendwie diesen Controller-Gedanken im Kopf und dass man den an dieser Stelle irgendwie einbringen "sollte". Es kann sehr gut sein, dass ich einfach falsch liege und somit eher in oben angesprochenem Forum hätte posten sollen, aber ich bin halt derzeit noch der Ansicht, dass ich nicht so ganz falsch liege.

Ich habe mir nun mal das SUN-Tutorial zur Verwendung des CardLayouts angeschaut und habe das Beispiel ausgetestet und etwas gespielt ... letztlich ist das irgendwie nicht ganz das, was ich möchte, so dass ich die Vermutung habe, dass ich mich vielleicht nicht so wirklich gut ausgedrückt habe.

Ich habe vor ein Fenster in drei Abschnitte zu teilen. Ich dachte, dass ich das durch obigen Java-Code deutlich gemacht hätte. Ganz oben ist also eine Toolbar, links ein Panel und rechts ein Panel. Die ToolBar und das rechte Panel bleiben fix. Da ändert sich nichts.
Das linke Panel möchte ich verändern.

Im Beispiel. Das Fenster wird angezeigt und im linken Panel können Einstellungen gemacht werden. Dann klickt man auf "weiter" (einen Button) und dann ändert sich das linke Panel und dort wird halt "etwas" angezeigt. Weiterhin switcht ein Button der ToolBar um, also setEnabled(true).

So. Ich könnte das durchaus irgendwie lösen (denke ich jetzt einfach mal), aber ich würde eben gerne wissen, wie man sowas denn elegant löst.

Hoffe, dass ich mich besser ausdrücken konnte, so dass Ihr vielleicht noch ein paar mehr Ideen für mich habt.
Das CardLayout verstehe ich derzeit nicht so, dass es das realisieren könnte, was ich gerne hätte.
Ist dem doch so .. dann erbitte ich ein kleines Beispiel.

Ich danke Euch.
Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 14:11   Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Code:
public class WizardPanel extends JPanel {
	public WizardPanel() {
		super(new BorderLayout());
		
		// die dinger musste dir irgendwie beschaffen
		add(staticPanel, BorderLayout.LINE_END);
		add(toolBar, BorderLayout.PAGE_START);
		add(configurationPanel, BorderLayout.LINE_START);
		
		weiterButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				WizardPanel.this.remove(configurationPanel);
				WizardPanel.this.add(otherPanel, BorderLayout.LINE_START);
				toolBarButton.setEnabled(true);
			}
		});
	}
}

Ein Controller wäre dann sinnvoll, wenn du nen komplexeren "Wizard" entwerfen willst, denn du wiederverwerten kannst.
In deinem Fall sind die Sachen, die du haben willst, aber so banal, dass sich das überhaupt nicht rentieren würde. Dafür musst du noch nichtmal das CardLayout bemühen, weil's noch nichtmal nen "Zurück"-Button gibt.

Aber kann auch sein, dass ich dich (immer noch) völlig falsch verstehe. Wenn's das oben auch nicht war, dann weiß ich auch nicht.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 14:17   Nach oben    #10
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Okay. Das teste ich aus. Danke Sieht auf den ersten Blick so aus, wie ich das gerne haben möchte. Wir werden sehen.
Warum nennt man das Ding Wizard? .. also .. hat das irgendeinen Grund oder machst Du das nur gerade so?

EDIT:
Bzw. der Button liegt ja im "configurationPanel" ... kann ich dann einfach so auf den zugreifen? :-/ ... verwirrt mich jetzt irgendwie.

Geändert von Ben (14.02.2006 um 14:20 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 14:44   Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

wenn ich das jetzt nicht völlig falsch verstanden habe, ist das linke panel in etwa ein wizard. d.h. zwigt mehrere inhalte auf verschiedenen seiten an. ein weiter und zurück button dient als navigation....

auf diese art könntest du das ganz gut lösen
Code:
WizardComponent[] pages = new WizardComponent[]{
 new WelcomePanel(),
 new InitialSettingsPanel(),
 new ScreenSettingsPanel(),
 new FinishSettingsPanel()
};

WizardContainer wiz = new WizardContainer(pages);

frame.getContentPane().add(wiz,BorderLayout.WEST);
Der WizardContainer stellt die weiter und zurück buttons zur verfügung, wenn das erste Panel angezeigt wird ist der zurück button durch (setEnabled(false)) außer gefecht gesetzt u.s.w
beim wechsel der panels wird beim gerade angezeigten panel die methode finishWizardComponent und beim als nächstes anzuzeigenden die methode startWizardComponent aufgerufen. Und der wechsel wird im Container etwa so vollzogen.
Code:
 remove(currentComponent);
 currentComponent = getNextWizardComponent();
 add(currentComponent);
 validate();

@page da macht man zwischen dem schreiben mal ne zigaretten und esspause und schon kommt einem jemand zuvor...
isch poste das jetzt trotzdem.
beny_mcde ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 15:20   Nach oben    #12
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

@beny: So hatte ich es auch verstanden, ja.
Nur wenn er nur 2 Panel anzeigen will, ist sowas echt zuviel.

@Ben: Hum. Du kannst auf den JButton zugreifen. Gar kein Thema.
Warum man das Ding Wizard nennt? Ähm... gute Frage...
Ich schätze mal, dass einer der ersten Wizards einen kleinen Zauberer als Bild irgendwo hatte.
Im Prinzip ist ein Wizard das, was dir in Eclipse ne neue Klasse erzeugt, oder ein neues Projekt, oder oder oder.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 15:36   Nach oben    #13
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Zitat:
Zitat von pago
Du kannst auf den JButton zugreifen.
Mittlerweile habe ich das auch gemerkt .

Jou. Ich denke, dass ich damit auf dem richtigen Weg bin. Ich muss jetzt nur irgendwie noch das BorderLayout ersetzen
Kleinere Haken gibt es aber noch. So wird z.B. nach dem Klick auf den "weiter"-Button irgendwie keine Aktualisierung durchgeführt.
Ich muss aber auch ehrlich gestehen, dass ich nicht ganz verstanden habe, was in der actionPerformed-Methode passiert bzw. was das für ein Zugriff ist
Hier erstmal die Klasse WizardPanel
PHP-Code:
public class WizardPanel extends JPanel {
    
    
    public 
WizardPanel() {
        
super(new BorderLayout());
        
        final 
FlipperPanel flipperPanel       = new FlipperPanel();        
        final 
ConfigurationPanel configPanel  = new ConfigurationPanel(flipperPanel);
        
ControlBarPanel controlBarPanel       = new ControlBarPanel(flipperPanel);        
        
        
this.add(flipperPanelBorderLayout.CENTER);
        
this.add(controlBarPanelBorderLayout.PAGE_START);
        
this.add(configPanelBorderLayout.LINE_START);
        
        
configPanel.getNextButton().addActionListener(new ActionListener() {            
            public 
void actionPerformed(ActionEvent event) {
                
WizardPanel.this.remove(configPanel);
                
WizardPanel.this.add(new InfoPanel(flipperPanel));
            }
            
        });
    }
    

wobei in der Klasse ConfigurationPanel einfach ein JButton erstellt und "geaddet" wird
PHP-Code:
this.next = new JButton("weiter");
add(this.next); 
Klickt man nun darauf .. sollte doch eigentlich das ConfigurationPanel entfernt und das InfoPanel angezeigt/hinzugefügt werden, oder? *kopfkratz*

Bei mir sieht das so aus, als würde das Config.Panel "stocken" und die Aktualisierung nicht stattfinden.

Langsam nerv ich, was?
*g*

Danke nochmals ..


EDIT:
Ich denke mal, dass das Thema mittlerweile besser in das Java-GUI-Forum passt. Aus diesem Grunde ...

Der Thread wurde verschoben, wegen ...
... Postings im falschen Forum.

moved

Geändert von Ben (14.02.2006 um 15:38 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 16:21   Nach oben    #14
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Du musst angeben, wo das neue InfoPanel hinzugefügt werden soll.
Ansonsten kannst du auch nochmal invalidate() aufrufen, vielleicht bringt das was.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.02.2006, 16:36   Nach oben    #15
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Ohweia ... ich hab jetzt aber validate() anstatt invalidate() aufgerufen. .. dann passt es. Ohne den Aufruf wird das infoPanel erst bei der nächsten Aktion angezeigt.

Gut. Fein
Ich werde eventuell nochmals auf diesen Thread zurückkommen. Werde ja sicherlich noch das ein oder andere Problem damit haben vom BorderLayout auf einen etwas "eleganteren" LayoutManager zu wechseln.

Danke erstmal
Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht 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 An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Swing Layouts erklären ex³ Desktop-Applikationen und Grafik 11 03.08.2006 14:30
Zwei unabhängige Teile in einem Applet realisieren Ben Desktop-Applikationen und Grafik 13 10.02.2006 09:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:06 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11