|
| 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
| |
|
|