Avatar billede fbisen Nybegynder
04. november 2008 - 14:33 Der er 3 kommentarer og
1 løsning

Combobox og indtastninger

Jeg har en combobox, hvori der er tal (egentlig String) fra 00 til 99. Comboboxen er ikke editable.

Når en bruger indtaster 99, forventer man at der vælges tallet 99. Her vælges dog 91. Det er somom den kører "opad", for trykker man 9 igen, vælges 92.

Men til forskel, så hvis man trykker 98, vælges 98, og ikke 80 som man måske ville tro.

Jeg vil gerne at den vælger det man trykker, hvis man kan sige det sådan.

Jeg har set på artiklen ( http://www.eksperten.dk/spm/310416 ), men ønsker ikke at skulle lave søgninger eller at den skal være editbar. Kan det virkelig ikke lade sig gøre?

mvh
Kasper
Avatar billede fbisen Nybegynder
04. november 2008 - 14:34 #1
Hovsa. Vi skal da lige have noget kode med.
Comboboxen laves således:

DefaultComboBoxModel model = new DefaultComboBoxModel();

for(int i = 0; i<100; i++)
{
    String adder = "" + i;
    if(i <= 9) adder = "0" + adder;
    model.addElement(adder);
}

JComboBox combo = new JComboBox(model);
Avatar billede fbisen Nybegynder
07. november 2008 - 12:45 #2
Er der ikke nogen der har haft samme problem?
Avatar billede ulrikm Nybegynder
09. november 2008 - 20:43 #3
Du skal lave en JComboBox.KeySelectionManager og implementere metoden public int selectionForKey(char aKey, ComboBoxModel aModel):

import javax.swing.*;

public class combo
{
    public static void main( String[] args )
    {
        JComboBox comboBox = new JComboBox();
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        for(int i = 0; i<100; i++)
        {
            String adder = "" + i;
            if(i <= 9) adder = "0" + adder;
            model.addElement(adder);
        }
        comboBox.setModel(model);

        JComboBox.KeySelectionManager keySel = new JComboBox.KeySelectionManager()
            {
                String prefix = "";
                long lastKeyTime = System.currentTimeMillis();

                private long getMsSinceLastKey()
                {
                    long msSinceLastKey = System.currentTimeMillis() - lastKeyTime;
                    lastKeyTime = System.currentTimeMillis();
                    return msSinceLastKey;
                }

                public int selectionForKey(char aKey, ComboBoxModel aModel)
                {
                    // bestem præfiks som skal matche
                   
                    if( getMsSinceLastKey() > 500 ) // efter et halvt sekund "glemmes" tidligere indtastninger
                        prefix = Character.toString(aKey);
                    else
                        prefix = prefix + aKey;

                    System.out.println("prefix='" + prefix+ "'" );

                    // find matchende element

                    for(int i = 0; i < aModel.getSize(); i++ )
                    {
                        if( aModel.getElementAt(i).toString().startsWith(prefix) )
                            return i;
                    }
                    return -1;// no matching prefix
                }
            };
        comboBox.setKeySelectionManager(keySel);

        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        f.getContentPane().add(comboBox);
        f.pack();
        f.show();
    }
}
Avatar billede fbisen Nybegynder
10. november 2008 - 16:09 #4
Det må jeg sige. Det er jo genialt! :)

Jeg troede faktisk ikke det kunne lade sig gøre, siden der gik et godt stykke tid. Måske var pointsne for få, eller også var det en sjældenhed.

I hvert fald, mange, mange tak for hjælpen! Det havde jeg svært ved at få ud af API'en.
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