Pop up

Status
Niet open voor verdere reacties.

Warranty

Gebruiker
Lid geworden
3 nov 2006
Berichten
100
Ik had weeris een vraagje.

Het betreft pop ups. Ik wil graag een pop up laten verschijnen wanneer een tekstveld niet is ingevuld. Hoe doe ik dit?

Moet ik een If statement gebruiken ofzo? Ik heb geen idee hoe de code eruit zou moeten zien. Ik heb wel gezocht maar ik kan het niet vinden op internet.

Het lijkt mij dat je moet aangeven dat als (If) een tekstvak leeg is, dat het pop upje moet verschijnen. Hoe doe ik dit?

Alvast bedankt!
 
Ik neem aan dat je het wilt controleren bij het drukken op een OK-knop of zoiets.
Deze code werkt:
Code:
        if (inputField.getText().length() == 0) {
            JOptionPane.showMessageDialog(this, 
                                          "Wilt u even dat veldje invullen?", 
                                          "Iets vergeten?", 
                                          JOptionPane.ERROR_MESSAGE);
        }else{
            //verdere verwerking....
        }

Zelf even opzoeken wat je nog meer met JOptionPane kunt doen ;) .
 
Hmmm, hij rekent showMessageDialog fout. Kan dat kloppen of zou hij het gewoon moeten doen? Ik heb nu zoiets als dit:

Code:
    class btnVerderHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e) {
            if (txtfPnr.getText().length() == 0) {
                JOptionPane.showMessageDialog(this,
                                              "Wilt u even dat veldje invullen?",
                                              "Iets vergeten?",
                                              JOptionPane.ERROR_MESSAGE);
            } else {
    
                PTStapF PTStapF = new PTStapF();
                PTStapF.setBounds(250, 150, 420, 370);
                PTStapF.setVisible(true);
    
                setVisible(false);
    
                String pnr = txtfPnr.getText();
                String medicijn = txtfMedicijn.getText();
                String frequentie = txtfFrequentie.getText();
    
                try {
    
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                    Connection conn = DriverManager.getConnection(
                            "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:/Erusmus.mdb;");
    
                    Statement ttoevoegen = conn.createStatement();
                    ttoevoegen.executeUpdate(
                            "INSERT INTO Medicijn (patientnr, medicijn, frequentie) VALUES ('" +
                            pnr + "','" + medicijn + "','" + frequentie + "')");
    
    //Extra
                    System.out.println("Connected To Access");
                    conn.close();
    
                }
    
                catch (SQLException se) {
                    System.out.println(se);
                }
    
                catch (Exception ex) {
                    System.out.println(ex);
                }
            }
        }
    }

Hier rekent hij dus dat showMessageDialog fout.
 
Je moet toch echt even lezen wat er over JOptionPane geschreven wordt, direct uit de bron:http://java.sun.com/j2se/1.5.0/docs/api/
Je kunt proberen een afgeslankte vorm te gebruiken:
Code:
    JOptionPane.showMessageDialog(null, 
                                          "Wilt u even dat veldje invullen?", 
                                          "Iets vergeten?", 
                                          JOptionPane.ERROR_MESSAGE);
of nog magerder:
Code:
            JOptionPane.showMessageDialog(null, 
                                          "Wilt u even dat veldje invullen?");
Het is waarschijnlijk dat 'this' dat hier de fout veroorzaakt.
 
Laatst bewerkt:
Code:
    class btnVerderHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e) {
    
            MTStap0 frame = new MTStap0();
if (txtfPnr.getText().length() == 0) {
    JOptionPane.showMessageDialog(frame,
        "Iets vergeten?",
        "Error",
JOptionPane.ERROR_MESSAGE);
}else{


    PTStapF PTStapF = new PTStapF();
    PTStapF.setBounds(250, 150, 420, 370);
    PTStapF.setVisible(true);

    setVisible(false);

    String pnr = txtfPnr.getText();
    String medicijn = txtfMedicijn.getText();
    String frequentie = txtfFrequentie.getText();

    try {

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
        Connection conn = DriverManager.getConnection(
                "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:/Erusmus.mdb;");

        Statement ttoevoegen = conn.createStatement();
        ttoevoegen.executeUpdate(
                "INSERT INTO Medicijn (patientnr, medicijn, frequentie) VALUES ('" +
                pnr + "','" + medicijn + "','" + frequentie + "')");

        //Extra
        System.out.println("Connected To Access");
        conn.close();
        //Extra

    }

    catch (SQLException se) {
        System.out.println(se);
    }

    catch (Exception ex) {
        System.out.println(ex);
    }
}
        }
    }

Deze doet het wel alleen zit ik nog met 1 ding. Achja eigenlijk 2 dingen dan maar :)

1. Is de code correct?

2. Kan ik alleen een bepaald tekstveld invullen bij het If statement zoals ik nu heb? Dat zou namelijk betekenen dat ik alle tekstvelden in een apart If statement ofzo moet zetten, of kan het makkelijker?
 
1: De code is blijkbaar correct, want het werkt. Toch zou ik geen loos MTStap0-frame in het leven roepen om alleen maar een foutboodschapje te tonen, maar gewoon 'null' gebruiken.
2: Bij een samengestelde controle hoort natuurlijk een wat uigebreidere controle en foutboodschap. Bij een beperkte set aan tekstvelden zou ik het maar gewoon stuk voor stuk controleren:
Code:
        boolean checkOk = true;
        String fouttekst = "";
        if (input1.getText().length() == 0) {
            checkOk = false;
            fouttekst += "\nveld 1 is niet ingevuld";
        }
        if (input2.getText().length() == 0) {
            checkOk = false;
            fouttekst += "\nveld 2 is niet ingevuld";
        }
        if (!checkOk) {
            JOptionPane.showMessageDialog(null, fouttekst, "Iets vergeten?", 
                                          JOptionPane.ERROR_MESSAGE);
        } else {
            //verdere verwerking....
        }
 
Aaah okeej, je kan gewoon meer If's gebruiken. Ik dacht dat het misschien iets van elseif zou zijn weetje wel. Maargoed... ik ga het meteen proberen.

Ohja er zijn natuurlijk regels in java enzo, ik neem toch aan dat als je die regels negeert, maar ondanks toch iets werkt, dat het eveneens niet correct is omdat het niet volgens de regels is. Zoals ik eigenlijk een beetje heb gedaan met MTStap0 (de naam van mijn frame). Maargoed, heel erg bedankt :thumb:
 
Hmmm, ik snap de hele code wel behalve 1 ding:

Code:
fouttekst += "\nveld 2 is niet ingevuld";

Waar staat \n voor? Hij laat dit namelijk niet zien... Verder werkt het gewoon dus hartstikke bedankt!
 
Goede vraag!
Die \n is een belangrijk element in de constructie van de foutboodschap. Het staat namelijk voor het 'begin van een nieuwe regel' oftewel een linefeed. Zo komt elke foutboodschap op een nieuwe regel te staan. Eén string, verdeeld over meerdere regels.
 
Aha... ik had hem in de eerste If statement even weggelaten om te kijken wat het gevolg was. Maar die was er dus niet omdat het zowiezo de eerste regel was. Ach, ik snap het nu! Dankje! :thumb:
 
Ah toch nog een vraagje, als je hem met een spatie invult lukt het nu dus wel. Moet ik daarvoor ook variabelen aanmaken zoals dit?

Code:
String fouttekst2 = " ";

Bijvoorbeeld? Of kan het makkelijker? Als het zo moet als ik heb beschreven in mijn voorbeeldje snap ik het wel, maar als het makkelijker kan hoor ik dat graag!
 
Het tekstvak uiteraard ;) Misschien kon ik dat idd beter neerzetten maargoed. Als ik in het tekstvak een spatie neerzet, dan geeft hij dus geen foutmelding.
 
Nu is het me helemaal duidelijk!
Een string heeft een methode trim aan boord,die kun je gebruiken:
Code:
if (input1.getText().trim().length() == 0)
.
.
.
 
En mag ik vragen wat een trim is? :D

Ik wil er "eigenlijk" (heel vervelend ik weet het) ook voor zorgen dat hij geen streepjes goedkeurt. Dus als ik in plaats van een fatsoenlijke naam een streepjeneerzet, of een getal in de naam. Is dat moeilijk?
 
Ja, je mag vragen wat een trim is. Dat ga je namelijk zelf opzoeken, in de Java-documentatie. Hier:
http://java.sun.com/j2se/1.5.0/docs/api/
En wanneer je daar toch aan het lezen bent wat je met een string kan doen, wijs ik je maar even op het bestaan van de methode 'contains' waarmee je je probleempje met een streepje kunt oplossen.
Toch een stukje code dan, voor de getallen:
Code:
public boolean hasNumber(String s) {
	for (int j = 0;j < s.length();j++) {
		if (Character.isDigit(s.charAt(j))) {
			return true;
		}
	}
	return false;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan