Avatar billede altinak Nybegynder
01. november 2005 - 10:02 Der er 13 kommentarer og
1 løsning

Disable JComboBox

Jeg har et program med flere comboboxe, hvor valget i en box reflekteres i den næste. Når man har foretaget et valg i en combobox, skal denne disables. Jeg har forsøgt mig med .disable(), men problemet er, at jeg ikke ved, hvor jeg skal placere denne kommando. Som det virker nu er comboboxen disabled fra start. Nogen forslag?
Avatar billede kalp Novice
01. november 2005 - 10:05 #1
Hvilket program programmere du i ?

Du skal sætte en actionlistener på din JComboBox og deri skrive din kode.
Avatar billede altinak Nybegynder
01. november 2005 - 10:12 #2
Jeg programmere i Eclipse, og jeg bruger en itemlistener til at udføre noget, eksempelvis således:

private javax.swing.JComboBox getVælgMærke() {
        if(VælgMærke == null) {
            System.out.println("itIs.outList1: "+itIs.outList1());
            ArrayList arrayList1 = itIs.outList1();
            String[] array1 = new String[arrayList1.size()];
            arrayList1.toArray(array1);
            String[] string = array1;
            VælgMærke = new javax.swing.JComboBox(string);
            VælgMærke.setName("");
               
            VælgMærke.addItemListener(
                new ItemListener() {
                        public void itemStateChanged(java.awt.event.ItemEvent event) {
                            if( event.getStateChange() == ItemEvent.SELECTED){
                               
                                String maerke = VælgMærke.getSelectedItem().toString();                               
                                System.out.println(maerke);
                                maerke=maerke.trim();
                                mærke = maerke;
                               
                                               
                                getJTextArea_South(mærke,kategor,mønste,dimensio,miljøI,anta,pr);
                               
                                ArrayList kategorier=kontantSalgHandler.enterMærke(maerke);
                               
                                ArrayList kategorier2=new ArrayList();
                                Object previousItem=kategorier.get(0);
                                kategorier2.add(kategorier.get(0));
                                int finishedFlag=0;
                                for (int i=1; i<=kategorier.size()-1;++i){
                                    if (finishedFlag==1){}
                                    else{
                                        previousItem=kategorier.get(i-1);
                                        for (int j=0; j<=kategorier.size()-1;++j){
                                            if (kategorier.get(j).equals(previousItem)){
                                            }
                                            else{
                                                kategorier2.add(kategorier.get(j));
                                            System.out.println("kategorier in if: "+kategorier);
                                            System.out.println("kategorier2 in if "+kategorier2);
                                            }
                                        if (j==kategorier.size()-1){finishedFlag=1;}
                                        }
                                       
                                           
                                    }
                                   
                                }
                               
                               
                               
                                System.out.println("KontantSalg01 kategorier: "+kategorier);
                                System.out.println("KontantSalg01 kategorier2: "+kategorier2);
                               
                                //final String[] array1 = new String[kategorier.size()];
                                String[] array1=new String[kategorier2.size()];
                                kategorier2.toArray(array1);
                                //string2 = array1;
                               
                                System.out.println("Array: " + array1);
               
                               
                                getVælgKategori(array1);
                               
                                //setContentPane(getJContentPane());
                                //getJContentPane(string);
                                //BorderLayout03_Center.add(getVælgKategori(string), null);
                                //getVælgKategori(string).addItem(kategorier);
                               
                            }
                           
                        }                       
            });               
        }   
       
        return VælgMærke;
    }

Problemet er desværre, at jeg ikke kan placere kommandoen "VælgMærke.disable()" inden i itemlisteneren. Skyldes dette, at det er en item-, og ikke actionlistener?
Avatar billede kalp Novice
01. november 2005 - 10:32 #3
prøv dette eksempel... dvs. opret denne frame og se om det kan bruges

package mypackage;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class Frame1 extends JFrame
{
  private JComboBox jComboBox1 = new JComboBox();

  public Frame1()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {



    jComboBox1.addMouseListener(new java.awt.event.MouseAdapter()
      {
        public void mouseClicked(MouseEvent e)
        {
          jComboBox1_mouseClicked(e);
        }
      });
 
    this.getContentPane().add(jComboBox1, null);
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    jComboBox1.setBounds(new Rectangle(55, 45, 270, 50));
    jComboBox1.addItem(new String("hejsa"));
    jComboBox1.addItem(new String("rada"));
   
  }


  private void jComboBox1_mouseClicked(MouseEvent e)
  {
  jComboBox1.disable();
  }

}
Avatar billede altinak Nybegynder
01. november 2005 - 11:01 #4
Fantastisk, det virker! Godt nok disables comboboxen først anden gang man forsøger at klikke på den, og ikke umiddelbart efter man har valgt et item fra comboboxen. Men det virker efter hensigten: man kan ikke gå tilbage og vælge noget nyt. :) Så hvis du lige smider et svar, er pointene dine!
Avatar billede kalp Novice
01. november 2005 - 11:05 #5
faktisk virker den først gang.. hvis du ikke trykker på pilen:P men trykker direkte i midten af boksen hehe
Avatar billede altinak Nybegynder
01. november 2005 - 11:08 #6
Ja, det har jeg også lige bemærket. :( Nuvel, pointene er dine alligevel, og jeg takker for hjælpen. Men hvis du har et forslag til, hvordan dette kan rettes, så tager jeg gerne imod. :)
Avatar billede kalp Novice
01. november 2005 - 11:09 #7
når min gruppe "holder" mindre øje med mig så kan jeg lige kigge på det igen hehe
Avatar billede altinak Nybegynder
01. november 2005 - 11:11 #8
Okay, takker. :)
Avatar billede kalp Novice
01. november 2005 - 11:15 #9
okay.. grim løsning.. men det virker altså:P


package mypackage;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Frame1 extends JFrame
{
  private JComboBox jComboBox1 = new JComboBox();
  private int tjek = 0;
  public Frame1()
  {
    try
    {
      jbInit();
     
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    jComboBox1.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jComboBox1_actionPerformed(e);
        }
      });
    this.getContentPane().add(jComboBox1, null);
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    jComboBox1.setBounds(new Rectangle(55, 45, 270, 50));
    jComboBox1.addItem(new String("hejsa"));
    jComboBox1.addItem(new String("rada"));
   
  }

  private void jComboBox1_actionPerformed(ActionEvent e)
  {
  tjek += 1;
  if(tjek == 2)
    jComboBox1.disable();
  }

}
Avatar billede kalp Novice
01. november 2005 - 11:16 #10
den kalder åbenbart actionPerformed ligeså snart programmet bliver kørt.. så derfor har jeg lavet en tæller som skal være = 2 før den disabler boksen..

så når programmet starter bliver tælleren sat til 1 og når man trykker på boksen så bliver tæller ligmed 2 og så bliver boksen disabled
Avatar billede kalp Novice
01. november 2005 - 11:19 #11
drop det.. her har du den rigtige og flotte løsning hehe

package mypackage;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class Frame1 extends JFrame
{
  private JComboBox jComboBox1 = new JComboBox();
  public Frame1()
  {
    try
    {
      jbInit();
     
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    jComboBox1.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jComboBox1_actionPerformed(e);
        }
      });
   
    this.getContentPane().add(jComboBox1, null);
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    jComboBox1.setBounds(new Rectangle(55, 45, 270, 50));
    jComboBox1.addItem(new String("hejsa"));
    jComboBox1.addItem(new String("rada"));
    jComboBox1.enable();
  }

  private void jComboBox1_actionPerformed(ActionEvent e)
  {
    jComboBox1.disable();
  }


}
Avatar billede kalp Novice
01. november 2005 - 11:19 #12
brug den sidste løsning:) den er pænest og mest korrekt!

jeg fandt ud af man blot skulle tilføje

jComboBox1.enable();

i sin kode:P
Avatar billede altinak Nybegynder
01. november 2005 - 11:31 #13
Yes, så virker det endelig! Fik ikke lige set, at du havde ændret jComboBox1_mouseClicked(MouseEvent e) til jComboBox1_actionPerformed(ActionEvent e), men da først det var sat på plads, fungerer det hele efter hensigten! :) Endnu engang tak for hjælpen - kan jo desværre ikke give dig flere point, men lidt karma skade ikke. ;)
Avatar billede kalp Novice
01. november 2005 - 11:38 #14
Tak skal du have:)) og godt det blev en pæn løsning:P
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