Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > Positionierung eines aufpoppenden Dialogs
Antwort
 
Themen-Optionen
Alt 12.04.2006, 10:08   Nach oben    #1
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard Positionierung eines aufpoppenden Dialogs

Hallo,

ich hab ein klitzekleines Problem mit einem aufpoppenden Dialog. Und zwar habe ich folgenden Dialog, in dem man etliche Einstellungen machen kann. Unter anderem kann man bei dem Dropdown "Weighting" das "Stanford EWEIGHT Weighting" auswählen, woraufhin sich der "Configure..." Button darunter enabled, da dafür ein weiterer Parameter (eine Datei) gesetzt werden muss.
Der große Dialog "Score View settings" poppt über einem JDesktopPane auf (nur zur Info).

Klicke ich nun zum ersten mal auf den "Configure..." Button, öffnet sich ein weiterer Dialog ("Select stanford file"), in dem man die Datei definieren kann. Der ist (beim ersten Mal) aber nicht relativ zum "Score View settings" Dialog zentriert, sondern hängt so komisch weit rechts rum (hier sieht man rechts auch noch die Hintergrundfarbe des JDesktopPane

Breche ich den "Stanford file" Dialog durch Cancel ab oder wähle eine Datei aus und klicke auf OK (führe also generell ein dispose() aus) und klicke danach wieder auf den "Configure..." Button, öffnet sich der Dialog wieder, aber diesmal eben zentriert, genauso wie ich das haben will...


Der actionPerformedCode für den "Configure..." Button ist hier:
Code:
else if(e.getActionCommand().equals("configureWeighting")) {
  SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      WeightingStrategy2 w = 
        (WeightingStrategy2)SettingsPanel.this.cpWeighting.getSelectedItem();
      JDialog dialog = w.getConfigurationDialog();
					
      //Position berechnen, damit der ConfigurationDialog zentriert über
      //dem SettingsDialog liegt
      int x = SettingsDialog.getInstance().getLocation().x;
      int y = SettingsDialog.getInstance().getLocation().y;
      x += SettingsDialog.getInstance().getWidth()/2 - dialog.getWidth()/2;
      y += SettingsDialog.getInstance().getHeight()/2 - dialog.getHeight()/2;
					
      dialog.pack();
      dialog.setLocation(x, y);
      dialog.show();
    }
				
  });
}
SettingsDialog ist der große Dialog. Da dieser Dialog zu jedem Zeitpunkt höchstens einmal vorhanden/sichtbar ist, habe ich den als Singleton implementiert. Ich bekomme also über die statische Methode SettingsDialog.getInstance() immer das selbe Objekt geliefert.
SettingsPanel ist quasi der ContentPane des SettingsDialog
w.getConfigurationDialog() liefert mir den kleinen Dialog ("Select Stanford file")
Das Berechnen der Position des ConfigurationDialogs scheint ja zu funktionieren, da das "Misplacement" ja nur beim ersten Aufruf des ConfigurationDialogs stattfindet...

Irgendwie seh ich net, was ich da falsch mache. Hat vielleicht jemand von euch einen Schimmer von einer blassen Ahnung?

THX in advance
sayang

PS: ob es hier notwendig ist, dass ich SwingUtilities#invokeLater(Runnable) benutze, weiss ich nicht, da ich noch nicht richtig ausgecheckt habe, wann/wie/warum... jedenfalls ändert es nichts an dem Problem, wenn ich es weglasse
Sayang ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 11:21   Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

Die Reihenfolge ist wichtig.
Erste musst du die Größe des Dialoges festlegen und dann positionieren.
java Code:
  1. else if(e.getActionCommand().equals("configureWeighting")) {
  2.   SwingUtilities.invokeLater(new Runnable() {
  3.     public void run() {
  4.       WeightingStrategy2 w =
  5.         (WeightingStrategy2)SettingsPanel.this.cpWeighting.getSelectedItem();
  6.       JDialog dialog = w.getConfigurationDialog();
  7.  
  8.       dialog.pack();
  9.       dialog.setLocationRelativeTo(SettingsDialog.getInstance());
  10.       dialog.setVisible(true); //show() ist deprecated
  11.     }
  12.  
  13.   });
  14. }
__________________
Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag.
karahead ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 13:17   Nach oben    #3
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard

Vielen vielen Dank,

man lernt nie aus. Das mit setLocationRelative kannte ich z. B. noch nicht Und dass das pack() vor der Positionierung kommen muss, ist ja sowas von klar, aber bin ich net hintergekommen
Allerdings muss ich weiter show() verwenden, da ich noch mit 1.4.2 arbeite, aber das habich ja auch net gesagt

BTW: was ich auch nicht gesagt habe, ist, dass der ConfigurationDialog ebenfalls als Singleton implementiert ist. Es wird alson nur ein einziges Mal eine Instanz erzeugt. Und genau deswegen wurde er bei allen folgenden aufrufen auch korrekt zentriert (er kannte seine Größe ja quasi schon seitdem er zum ersten mal aufgerufen wurde).... tjaja... so gehts Stück für Stück weiter... vielen Dank nochmal.

sayang
Sayang ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.04.2006, 00:55   Nach oben    #4
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Zitat:
Zitat von Sayang
Allerdings muss ich weiter show() verwenden, da ich noch mit 1.4.2 arbeite
Bist du dir da ganz sicher?
Ich meine das .setVisible(boolean) gibts schon eine ganze Weile.


Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.04.2006, 11:52   Nach oben    #5
Benutzer
 
Registriert seit: 05.12.2005
Beiträge: 62
Standard

Stimmt, irgendwie hab ich da letztens was übersehen... danke

sayang
Sayang 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
JSplitPane positionierung :( Sternenjaeger Desktop-Applikationen und Grafik 9 05.01.2006 20:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:35 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 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44