Avatar billede taae Juniormester
12. oktober 2005 - 22:57 Der er 8 kommentarer og
1 løsning

Spg vedr. JComboBox

hej jeg sidder og laver et program, hvor jeg har adskillige JComboBoxe. Mit spg går ud på at hvis jeg har forskellige bilnavne i min første combobox, så ønsker jeg at når jeg vælger et bilnavn, ex Audi, så skal den næste combobox automatisk læse ind de modeller som Audi har.Ligeledes gældende for andre modelelr også.

spg nr. 2 - jeg havde tænkt mig at lave String array og gemme dem i combobox, med bilnavne og modeller. Men jeg skal også ha gemt disse data på en database.
Er det så bedst at gemme dem som String array, eller kan jeg på en smart måde hente dem fra db og indlæse dem i combobox ?

Hvordan kan jeg lave det på en smart måde.
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:12 #1
Spg. 1) Du kan gøre noget a la:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestCombo extends JFrame
{
    private String[] cars = {"Fiat", "Volvo", "Ferrari"};
   
    private String[] modelsFiat = {"FiatModel1", "FiatModel2", "FiatModel3"};
    private String[] modelsVolvo = {"VolvoModel1", "VolvoModel2", "VolvoModel3"};
    private String[] modelsFerrari = {"FerrariModel1", "FerrariModel2", "FerrariModel3"};
   
    private JComboBox comboCars = new JComboBox(cars);
    private JComboBox comboModels = new JComboBox();
   
    public TestCombo()
    {
        setSize (300, 100);
           
        this.getContentPane().add(comboCars, BorderLayout.NORTH);
        this.getContentPane().add(comboModels, BorderLayout.SOUTH);
       
        comboCars.addActionListener(new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                Object obj = comboCars.getSelectedItem();
                DefaultComboBoxModel model = null;
               
                if (obj == "Fiat")
                    model = new DefaultComboBoxModel (modelsFiat);
                else if (obj == "Volvo")
                    model = new DefaultComboBoxModel (modelsVolvo);
                else if (obj == "Ferrari")
                    model = new DefaultComboBoxModel (modelsFerrari);
                   
                if (model != null)
                    comboModels.setModel(model);                   
            }
        });
    }
   
    public static void main (String[] args)
    {
        new TestCombo().setVisible(true);
    }
}
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:14 #2
Spg. 2)

Det kommer an på hvordan strukturen i dit program er bygget op. Hvis du har nem tilgang til at hente modellerne for en bestemt bil fra databasen, så vil jeg vælge den løsning.
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:15 #3
Og bemærk! Jeg arbejder med Strings - det vil naturligvis være bedre at arbejde med egne objekter, så de har alle de egenskaber du har brug for.
Avatar billede taae Juniormester
12. oktober 2005 - 23:21 #4
jeg er faktisk i starten af mit opbygning af programmet. Det slog mig bare at jeg også skal ha oplysninger fra combobox ned i db, så jeg tænkte på at i stedet for at gentage det hele 2 gange om der så var en smartere måde man kunne gøre det på. Hvilket vil sige at jeg lagrer oplysninger nede i db og de blir så hentet når jeg starter programmet op .
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:25 #5
For at demonstrerer det med objekter har jeg ændret eksemplet lidt.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestCombo extends JFrame
{   
    private JComboBox comboCars = new JComboBox();
    private JComboBox comboModels = new JComboBox();
   
    public TestCombo()
    {
        setSize (300, 100);
           
        this.getContentPane().add(comboCars, BorderLayout.NORTH);
        this.getContentPane().add(comboModels, BorderLayout.SOUTH);
       
        comboCars.addActionListener(new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                Car car = (Car)comboCars.getSelectedItem();
                if (car != null)               
                    comboModels.setModel(new DefaultComboBoxModel (car.getModels()));                   
            }
        });
       
        BuildCars ();
    }
   
    private void BuildCars ()
    {
        Car[] cars = new Car[3];
       
        // Fiat
        Model[] modelsFiat = new Model[3];
        modelsFiat[0] = new Model ("ModelFiat1");
        modelsFiat[1] = new Model ("ModelFiat2");
        modelsFiat[2] = new Model ("ModelFiat3");
        cars[0] = new Car ("Fiat", modelsFiat);
       
        // Volvo
        Model[] modelsVolvo = new Model[3];
        modelsVolvo[0] = new Model ("ModelsVolvo1");
        modelsVolvo[1] = new Model ("ModelsVolvo2");
        modelsVolvo[2] = new Model ("ModelsVolvo3");
        cars[1] = new Car ("Volvo", modelsVolvo);
       
        // Ferrari
        Model[] modelsFerrari = new Model[3];
        modelsFerrari[0] = new Model ("ModelsFerrari1");
        modelsFerrari[1] = new Model ("ModelsFerrari2");
        modelsFerrari[2] = new Model ("ModelsFerrari3");
        cars[2] = new Car ("Ferrari", modelsFerrari);
       
        comboCars.setModel(new DefaultComboBoxModel (cars));       
    }
   
    public static void main (String[] args)
    {
        new TestCombo().setVisible(true);
    }
}

class Car
{
    private String carName;
    private Model[] models;
   
    public Car (String carName, Model[] models)
    {
        this.carName = carName;
        this.models = models;
    }
   
    public String getCarName ()
    {
        return carName;
    }
   
    public Model[] getModels()
    {
        return models;
    }
   
    public String toString()
    {
        return carName;
    }
}

class Model
{
    private String modelName;
   
    public Model (String modelName)
    {
        this.modelName = modelName;
    }
   
    public String getModelName ()
    {
        return modelName;
    }
   
    public String toString()
    {
        return modelName;
    }
}
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:26 #6
Og min buildCars skal du så ændre til at fylde Cars objekter med data fra din database.
Avatar billede mikkelbm Nybegynder
12. oktober 2005 - 23:26 #7
Spørg endelig hvis du er i tvivl.
Avatar billede mikkelbm Nybegynder
14. oktober 2005 - 12:53 #8
Brugbart?
Avatar billede touel Nybegynder
14. oktober 2005 - 21:22 #9
hej mikkel ... jeg har stadig ikke kunne sætte mig ind i dit eks .. jeg har travlt med noget andet pt.. men jeg lover at vende tilbage igen i løbet af weekenden
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester