| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | JOptionPane .. hvordan? Fra : Janus | 
  Dato :  14-01-06 02:14 |  
  |   
            Er der nogen, der kan fortælle mig, hvordan JOptionPane.showXXXDialog() 
 fungerer?
 Jeg ønsker nemlig at lave noget lignende, men kan her kl 2 om natten 
 ikke overskue, hvordan jeg får metoden til at returnere en værdi, når 
 der trykkes på en knap på mit OptionPane... argh! :)
 
 
 
 Med venlig hilsen
 Janus
 
 
  
            
             |   |   
            
        
 
            
         
           Thomas Bendsen (14-01-2006) 
         
	
            | Kommentar Fra : Thomas Bendsen | 
  Dato :  14-01-06 06:32 |  
  |   
            Janus wrote:
 > Er der nogen, der kan fortælle mig, hvordan JOptionPane.showXXXDialog() 
 > fungerer?
 > Jeg ønsker nemlig at lave noget lignende, men kan her kl 2 om natten 
 > ikke overskue, hvordan jeg får metoden til at returnere en værdi, når 
 > der trykkes på en knap på mit OptionPane... argh! :)
 > 
 > 
 > 
 > Med venlig hilsen
 > Janus
 > 
 > 
 Hej Janus
 
 String str = JOptionPane.showInputDialog(...);
 
 vil sætte str til det der skrives i inputdialogen, når der trykkes på OK.
 
 int choice = JOptionPane.showConfirmDialog(parentComponent,"hej med 
 dig","titel",JOptionPane.YES_NO_CANCEL_OPTION);
 
 vil sætte choice til JOptionPane.YES_OPTION eller JOptionPane.NO_OPTION 
   eller JOptionPane.CANCEL_OPTION.
 
 osv.
 
 MVH Thomas Bendsen
  
            
             |   |   
            
        
 
            
         
           Janus (14-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  14-01-06 11:26 |  
  |   
            Thomas Bendsen wrote:
 
 > Hej Janus
 
 Hej Thomas!
 
 > 
 > String str = JOptionPane.showInputDialog(...);
 > 
 
 Ok, jeg fik vist ikke lige gjort mit problem klart nok. Det er ikke 
 brugen af det eksisterende JOptionPane.showXXX() jeg har problemer med, 
 det er let nok.
 Jeg ønsker at lave min *helt* egen klasse, der fungerer på samme måde 
 som JOptionPane.showXXX() uden at extende det.
 
 Metodekroppen skal være:
     public static Color showColorDialog(JComponent parent, Color color)
 
 Det jeg mangler er at finde ud af, hvordan man får det statiske 
 metodkald til at returnere en Color UDEN at have tilknyttet en listener 
 tilhørende den kaldende metode.
 
 Altså:
 
 1) kald min *egen* statiske showXXX() metode
 2) få en dialogboks op, liggende i denne showXXX()
 3) først når brugeren trykker på en knap i dialogboksen, returnerer 
 denne metode en Color.
 
 
 Mvh Janus
  
            
             |   |   
            
        
 
            
         
            Filip Larsen (14-01-2006) 
         
	
            | Kommentar Fra : Filip Larsen | 
  Dato :  14-01-06 12:38 |  
  |   
            Janus skrev
 
 > Jeg ønsker at lave min *helt* egen klasse, der fungerer på samme måde
 > som JOptionPane.showXXX() uden at extende det.
 
 Kig på koden for fx. JOptionPane.showInputDialog og lav noget lignende.
 
 
 > Metodekroppen skal være:
 >     public static Color showColorDialog(JComponent parent, Color
 color)
 
 Måske JColorChooser.showDialog gør hvad du vil.
 
 
 Mvh,
 -- 
 Filip Larsen
 
 
  
            
             |   |   
            
        
 
            
         
             Janus (14-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  14-01-06 13:37 |  
  |   
            Filip Larsen wrote:
 > 
 > Kig på koden for fx. JOptionPane.showInputDialog og lav noget lignende.
 > 
 
 Ja, den idé havde jeg også selv i nat, men til min store overraskelse, 
 kunne jeg ikke finde kildekoden i mit Java-bibliotek, kun rt.jar ??
 
 
 Vh Janus
  
            
             |   |   
            
        
 
            
         
              Søren Mors (14-01-2006) 
         
	
            | Kommentar Fra : Søren Mors | 
  Dato :  14-01-06 14:01 |  
  |   
            Janus wrote:
 > Filip Larsen wrote:
 > 
 >>
 >> Kig på koden for fx. JOptionPane.showInputDialog og lav noget lignende.
 >>
 > 
 > Ja, den idé havde jeg også selv i nat, men til min store overraskelse, 
 > kunne jeg ikke finde kildekoden i mit Java-bibliotek, kun rt.jar ??
 
 Plejer kildekoden ikke at være et seperart download. Hvis du roder lidt 
 rundt på Suns sider skal du nok finde det.
 
 En mulighed vil være at den statiske metode laver en 
 java.util.concurrent.CountDownLatch med count 1, og kalder await() på 
 den, efter den har vist de vindue. OK knappen skal så kalde countDown på 
 samme latch. Det vil blokere den statiske metode, og dermed din tråd, 
 indtil der er trykket ok. Du kan så returnere den valgte værdi.
 
 Søren Mors
  
            
             |   |   
            
        
 
            
         
               Thorbjørn Ravn Ander~ (14-01-2006) 
         
	
            | Kommentar Fra : Thorbjørn Ravn Ander~ | 
  Dato :  14-01-06 14:06 |  
  |  
 
            Søren Mors <soerenmors@stofanet.dk> writes:
 > > Ja, den idé havde jeg også selv i nat, men til min store
 > > overraskelse, kunne jeg ikke finde kildekoden i mit Java-bibliotek,
 > > kun rt.jar ??
 > 
 > Plejer kildekoden ikke at være et seperart download. Hvis du roder
 > lidt rundt på Suns sider skal du nok finde det.
 src.zip ligger i SDK'en, og er et valg ved installation.
 Bemærk Suns licens, som kan have indflydelse på hvad du kan bruge det til.
 -- 
   Thorbjørn Ravn Andersen
   http://unixsnedkeren.dk/ravn/
            
             |   |   
            
        
 
            
         
              Filip Larsen (14-01-2006) 
         
	
            | Kommentar Fra : Filip Larsen | 
  Dato :  14-01-06 13:52 |  
  |   
            Janus skrev
 
 > Ja, den idé havde jeg også selv i nat, men til min store overraskelse,
 > kunne jeg ikke finde kildekoden i mit Java-bibliotek, kun rt.jar ??
 
 Man kan vist til- eller fravælge kildekoden under installation. Under
 alle omstændigheder er der kun tale om en enkelt src.zip fil på ca. 11
 MB (for Java 1.4.2).
 
 Her er et lille udklip af den nævnte metode fra JOptionPane.java:
 
     public static Object showInputDialog(Component parentComponent,
         Object message, String title, int messageType, Icon icon,
         Object[] selectionValues, Object initialSelectionValue)
         throws HeadlessException {
         JOptionPane    pane = new JOptionPane(message, messageType,
                                               OK_CANCEL_OPTION, icon,
                                               null, null);
 
         pane.setWantsInput(true);
         pane.setSelectionValues(selectionValues);
         pane.setInitialSelectionValue(initialSelectionValue);
         pane.setComponentOrientation(((parentComponent == null) ?
      getRootFrame() : parentComponent).getComponentOrientation());
 
         int style = styleFromMessageType(messageType);
         JDialog dialog = pane.createDialog(parentComponent, title,
 style);
 
         pane.selectInitialValue();
         dialog.show();
         dialog.dispose();
 
         Object value = pane.getInputValue();
 
         if (value == UNINITIALIZED_VALUE) {
             return null;
         }
         return value;
     }
 
 
 Mvh,
 -- 
 Filip Larsen
 
 
  
            
             |   |   
            
        
 
            
         
               Janus (14-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  14-01-06 14:12 |  
  |   
            Filip Larsen wrote:
 
 >         dialog.show();
 
 -Og det er så lige præcis HER, mellem disse to linier, tråden knækkede 
 for mig i går :)
 
 >         dialog.dispose();
 
 Jeg har fundet en løsning.
 
 
 Mange tak for jeres besvarelser!
  
            
             |   |   
            
        
 
            
         
                Filip Larsen (14-01-2006) 
         
	
            | Kommentar Fra : Filip Larsen | 
  Dato :  14-01-06 16:32 |  
  |   
            Janus skrev
 
 > >         dialog.show();
 > >         dialog.dispose();
 >
 > -Og det er så lige præcis HER, mellem disse to linier, tråden knækkede
 > for mig i går :)
 
 Bemærk, at JOptionPane benytter en modal JDialog, hvilket betyder, at
 dialog.show() ikke returnerer før dialogen lukkes.
 
 > Jeg har fundet en løsning.
 
 Hvis det er løkken "while (!doClose);" du mener, så er det en skidt
 løsning. Brug enten en modal JDialog eller saml resultatet op vha. en
 listener callback.
 
 
 Mvh,
 -- 
 Filip Larsen
 
 
  
            
             |   |   
            
        
 
            
         
                 Janus (15-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  15-01-06 00:48 |  
  |   
            Filip Larsen wrote:
 
 > 
 > Hvis det er løkken "while (!doClose);" du mener, så er det en skidt
 > løsning. Brug enten en modal JDialog eller saml resultatet op vha. en
 > listener callback.
 > 
 
 Det var det, men jeg har droppet det igen... for det havde overhovedet 
 ikke nogen effekt, hvilket jeg ganske udmærket vidste. Det var egentlig 
 bare en test, men så, ja, virkede det? I hvert fald i min lille 
 testkode. Men da jeg prøvede samme struktur på min egentlig ColorChooser 
 virkede det (selvfølgelig) ikke, netop pga modal.
 
 Jeg har efterfølgende bare gjort sådan, at trykket på "OK" knappen 
 kaldte dispose() på JPanel'et og tråden kunne forsætte og dermed 
 returnere den valgte farve.
 
 Jeg kan desværre ikke genskabe det scenarie jeg fik fremtryllet 
 tidligere, dér hvor while-løkken-tingen virkede. Jeg kan det sikkert 
 ikke, fordi det slet ikke burde virke :)
 
 
 Anyways, tak til alle for Jeres besvarelser.
 
 
 Med venlig hilsen Janus
  
            
             |   |   
            
        
 
            
         
            Thorbjørn Ravn Ander~ (14-01-2006) 
         
	
            | Kommentar Fra : Thorbjørn Ravn Ander~ | 
  Dato :  14-01-06 14:05 |  
  |  
 
            Janus <nospam@nomail.com> writes:
 > Jeg ønsker at lave min *helt* egen klasse, der fungerer på samme måde
 > som JOptionPane.showXXX() uden at extende det.
 Kunne du eventuelt begrunde hvorfor?
 -- 
   Thorbjørn Ravn Andersen
   http://unixsnedkeren.dk/ravn/
            
             |   |   
            
        
 
            
         
             Janus (14-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  14-01-06 14:18 |  
  |  
 
            Thorbjørn Ravn Andersen wrote:
 > Janus <nospam@nomail.com> writes:
 > 
 > 
 >>Jeg ønsker at lave min *helt* egen klasse, der fungerer på samme måde
 >>som JOptionPane.showXXX() uden at extende det.
 > 
 > 
 > Kunne du eventuelt begrunde hvorfor?
 > 
 Jeg kan da prøve. 2 årsager:
 1) Det er en læreproces
 2) Jeg ønsker at lave et lille popup-vindue, hvor man vælger en farve og 
 trykker OK, præcis som i JColorChooser. Jeg benytter mig også af denne 
 klasse internt i min egen OptionPane, men ville gerne ha' at designet 
 var lidt anderledes:  http://home.tiscali.dk/mailbox/myChooser.JPG
Med venlig hilsen Janus
            
              |   |   
            
        
 
            
         
           Janus (14-01-2006) 
         
	
            | Kommentar Fra : Janus | 
  Dato :  14-01-06 14:07 |  
  |   
            Thomas Bendsen wrote:
 > Janus wrote:
 > 
 >> Er der nogen, der kan fortælle mig, hvordan 
 >> JOptionPane.showXXXDialog() fungerer?
 >> Jeg ønsker nemlig at lave noget lignende, men kan her kl 2 om natten 
 >> ikke overskue, hvordan jeg får metoden til at returnere en værdi, når 
 >> der trykkes på en knap på mit OptionPane... argh! :)
 >>
 
 Nå, jeg fik noget til at virke:
 
 ....
 
 button.addActionListener(new ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent arg0) {
          setClose(true);
      };
 });
 
 ....
       
 while (!doClose) {}
    
     dialog.dispose();
     return val;
 }
    
 private static void setClose(boolean c) {
      doClose = c;
 }
 
 
 Synes godt nok ikke lige, det er det smukkeste jeg har set. Det slår det 
 harmonikasammenstød på motorvejen for et par uger siden, men også kun 
 lige knap og nap.
 
 Forslag til forbedringer?
 
 
 Vh Janus
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |