method maken voor het genereren van een formulier

Status
Niet open voor verdere reacties.

Clemens Schalkw

Gebruiker
Lid geworden
5 dec 2007
Berichten
166
Ik ben een invulformulier aan het maken.
Het valt me op dat je zoveel regels code moet schrijven om één regel van je formulier te kunnen maken.
Ik zou dit graag in een method willen zetten maar kom er niet echt uit hoe ik dit moet doen.

Ik wil het volgende:

naam | textveld | error message (indien van toepassing)

Dit is mijn code voor één regel in het formulier:

Code:
     JPanel mainform = new JPanel(new GridBagLayout());

            JLabel lblName = new JLabel("naam: ");
            JTextField txtName = new JTextField(30);

            // TODO: Only show errormessage if name is null or incorrect
            JLabel errName = new JLabel("U heeft uw naam niet ingevuld");

            GridBagConstraints lblNameCstr = new GridBagConstraints();
            GridBagConstraints txtNameCstr = new GridBagConstraints();
            GridBagConstraints errNameCstr = new GridBagConstraints();

            lblNameCstr.gridx = 0;
            lblNameCstr.gridy = 0;
            lblNameCstr.insets = new Insets(0, 0, 0, 20);

            txtNameCstr.gridx = 1;
            txtNameCstr.gridy = 0;
            txtNameCstr.insets = new Insets(0, 0, 0, 20);

            errNameCstr.gridx = 2;
            errNameCstr.gridy = 0;

            mainform.add(lblName, lblNameCstr);
            mainform.add(txtName, txtNameCstr);
            mainform.add(errName, errNameCstr);
 
Ik zou met een GridLayout werken en elke regel in een losse FlowLayout zetten. Voor dit soort dingen is een GridBagLayout overkill.
 
Opzich kan je het volgens mij meteen in een GridBagLayout zetten, omdat je hierin kan aangeven op welke rij en welk kolom je een bepaalde Component wilt zetten.
Als je dat eerst in een FlowLayout gaat zetten die je vervolgens (dus als hele regel) toevoegt aan een GridLayout gaat volgens mij je performance flink achteruit omdat je voor iedere regel in je formulier een "extra" object aanmaakt.
Ik heb mijn code al flink ingekort door bij het aanmaken van een GridBagConstraint object meteen alle parameters in te vullen.

Het ziet er nu zo uit :

Code:
        JPanel mainform = new JPanel(new GridBagLayout());

            JLabel lblCompany = new JLabel("Bedrijfsnaam: ");
            JLabel lblAddress = new JLabel("Adres: ");

            JTextField txtCompany = new JTextField();
            JTextField txtAddress = new JTextField();

            // TODO: Only show errormessage if name is null or incorrect
            JLabel errCompany = new JLabel("U heeft de bedrijfsnaam niet ingevuld");
            JLabel errAddress = new JLabel("U heeft het adres niet ingevuld");

            GridBagConstraints lblCompanyCstr = new GridBagConstraints(0, 0, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 20), 0, 0);
            GridBagConstraints txtCompanyCstr = new GridBagConstraints(1, 0, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 20), 200, 0);
            GridBagConstraints errCompanyCstr = new GridBagConstraints(2, 0, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 0), 0, 0);

            GridBagConstraints lblAddressCstr = new GridBagConstraints(0, 1, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 20), 0, 0);
            GridBagConstraints txtAddressCstr = new GridBagConstraints(1, 1, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 20), 300, 0);
            GridBagConstraints errAddressCstr = new GridBagConstraints(2, 1, 1, 1, 0, 0, 18, 0, new Insets(0, 0, 0, 0), 0, 0);

            mainform.add(lblCompany, lblCompanyCstr);
            mainform.add(txtCompany, txtCompanyCstr);
            mainform.add(errCompany, errCompanyCstr);
            mainform.add(lblAddress, lblAddressCstr);
            mainform.add(txtAddress, txtAddressCstr);
            mainform.add(errAddress, errAddressCstr);
 
Performance is bij deze kleine berekeningen geen issue, het verschil is met het blote oog echt niet te zien.
Je kan je ook beperken met de errormessages, door dit bijv. pas bij het wegschrijven te controleren en dan één algemene melding te tonen in de vorm van "Niet alle verplichte velden zijn ingevuld. Rode velden zijn verplicht", en dan die JLabels op rood te zetten. Dit scheelt ook aanzienlijk in de code.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan