Archief - [PROG]JAVA beginnersvraag: keuzelijstje JOptionPane.showInputDialog

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

maxdevis

Legacy Member
http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html zei:
Getting the User's Input from a Dialog

The only form of showXxxDialog that doesn't return an integer is showInputDialog, which returns an Object instead. This Object is generally a String reflecting the user's choice. Here is an example of using showInputDialog to create a dialog that lets the user choose one of three strings:

An input dialog with a combo box

Object[] possibilities = {"ham", "spam", "yam"};
String s = (String)JOptionPane.showInputDialog(
frame,
"Complete the sentence:\n"
+ "\"Green eggs and...\"",
"Customized Dialog",
JOptionPane.PLAIN_MESSAGE,
icon,
possibilities,
"ham");

Ik zou graag een venstertje krijgen zodat de user de dagen van de maand (28,29,30 of 31) kan aanklikken.

ik heb nu dit

int [] aantalDagen = {28,29,30,31};
int dagen = (int)JOptionPane.showInputDialog(frame,
"Hoeveel dagen heeft je maand?",
"Neerslag",
JOptionPane.PLAIN_MESSAGE,
icon,
aantalDagen,
30);

maar eclipse geeft een probleem met frame en icon.
wat moet ik daar dan juist zetten?

alvast bedankt

Hit Hard

Legacy Member
frame moet het "Parent Component" bevatten, dit is normaal gezien het venster waarout het dialoogvenster wordt opgeroepen. Als je de Dialog aanroept vanuit een klasse die overerft van JFrame, kan je dus gewoon "frame" vervangen door "this".
Bij icon kan je een afbeelding meegeven (van het type Icon), of als je geen afbeelding wilt gewoon null meegeven.

maxdevis

Legacy Member
bedankt voor je reactie!
helaas is het probleem nog niet opgelost:

JFrame behoort tot javax.swing als ik het goed heb. en die is geimporteerd.
als ik dan this ipv frame schrijf dan krijg ik volgende melding:

"cannot use this in a static context"

Emerxill

Legacy Member
Ik heb zo een klein vermoeden dat ge dat alles in de main() method aant doen zijt? Of allesinds in een static method...

Nu een static method kan geen weet hebben van het bestaan van "this" aangezien deze pas beschikbaar gaat zijn wanneer er een instance van uw frame gemaakt is (new). En een static kan gebruikt worden zonder dat er een instance bestaat van uw klasse...volgt ge? :)

Nu de oplossing gaat zijn dat ge heel uw code uit die static method (main) gaat halen en in een andere (non-static)method te steken. Om deze vervolgens op te roepen in uw main-method.

Ahja, wa bedoelt ge eigenlijk met "ik heb die geimporteerd"? Door gebruik te maken van "import" of door uw klasse te extenden met JFrame (extends JFrame daarboven bij te zetten)? Nu als ge uw klasse extend met JFrame gaat ge die ook moeten importeren dmv "import" :)
Als ge uw klasse geen subclass is van JFrame gaat nog met een probleemke zitten denk ik...

maxdevis

Legacy Member
maar als ik het in een andere klasse doe, dan krijg ik
frame can not be resolved

Emerxill

Legacy Member
In een andere method zetten, ni een andere klasse
Post anders de code die ge al hebt, dan gaat dat wa vlotter gaan...

maxdevis

Legacy Member
hmmm,

het moest er gewoon als volgt uitzien:

public static int setDagenMaand()
{
Object [] aantalDagen = {4,28,29,30,31};
Integer dagen = (Integer)JOptionPane.showInputDialog(null, "Hoeveel dagen heeft je maand?","Neerslag",JOptionPane.PLAIN_MESSAGE,null,aantalDagen,aantalDagen[2]);
return dagen;
}

maxdevis

Legacy Member
public class NeerslagTest {

/**
* @param args
*/
public static void main(String[] args) {

Neerslag neerslag = new Neerslag(setDagenMaand());
neerslag.invoerMaandGegevens();
JOptionPane.showMessageDialog(null, "Het programma is ten einde.\nDe gemiddelde temperatuur bedroeg "+neerslag.gemiddelde()+"°C", "Einde", JOptionPane.INFORMATION_MESSAGE);

}

public static int setDagenMaand()
{
Object [] aantalDagen = {4,28,29,30,31};
Integer dagen = (Integer)JOptionPane.showInputDialog(null, "Hoeveel dagen heeft je maand?","Neerslag",JOptionPane.PLAIN_MESSAGE,null,aantalDagen,aantalDagen[2]);
return dagen;
}



}

omdat hij anders bij Neerslag neerslag = new Neerslag(setDagenMaand()); de volgende error geeft:
"Cannot make a static reference to the non-static method setDagenMaand() from the type
NeerslagTest"
ben nog aan het uitzoeken hoe dat juist komt en wat dat juist betekent.

beginners zoals ik hebben toch duidelijk een zwaar leven :p

forloRn_

Legacy Member
Dat hij die error geeft is logisch: je maakt geen instance van de klasse NeerslagTest zodat je setDagenMaand() wel static moet aanroepen.

Het is niet ongebruikelijk om in de main-methode een instance te maken van de klasse die de main-methode bevat (in dit geval NeerslagTest) en te werken met neerslagTest.setDagenMaand(), waarbij neerslagTest een instance is van NeerslagTest.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan