Avatar billede mannik Nybegynder
15. februar 2004 - 12:33 Der er 8 kommentarer og
1 løsning

getSelectedItem - add SelectedItem

Hvordan griber jeg følgende an;

Jeg har et tekstfelt (Jtextfield1) samt en JComboBox og til sidst en knap (Jbutton11)Nu ville jeg gerne at hvis man vælger et punkt i min ComboBox så bliver det vist i mit tekstfelt, hvis derimod jeg skriver en titel i mit tekstfelt der ikke findes i min combobox i forvejen skal det tilføjes listen.
Avatar billede _carsten Nybegynder
15. februar 2004 - 14:03 #1
Her er et køreklart eksempel

public class JFrame_14 extends javax.swing.JFrame {
   
    public JFrame_14() {
        initComponents();
    }
   
    private void initComponents() {
        jTextField1 = new javax.swing.JTextField();
        jComboBox1 = new javax.swing.JComboBox();
        jButton1 = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jTextField1.setPreferredSize(new java.awt.Dimension(100, 18));
        getContentPane().add(jTextField1);

        jComboBox1.setPreferredSize(new java.awt.Dimension(150, 18));
        jComboBox1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                setTextField(evt);
            }
        });

        getContentPane().add(jComboBox1);

        jButton1.setText("Tilf\u00f8j til comboBox");
        jButton1.setPreferredSize(new java.awt.Dimension(150, 18));
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addNewItem(evt);
            }
        });

        getContentPane().add(jButton1);

        pack();
    }

    private void addNewItem(java.awt.event.ActionEvent evt) {
        javax.swing.ComboBoxModel model = jComboBox1.getModel();
        boolean found = false;
       
        for(int i = 0; i < model.getSize();i++){
            if(jTextField1.getText().equals(jComboBox1.getItemAt(i).toString()))
                found = true;
        }
       
        if(!found)
            jComboBox1.addItem(jTextField1.getText());
    }

    private void setTextField(java.awt.event.ItemEvent evt) {
        if(evt.getStateChange() == 1)
            jTextField1.setText(evt.getItem().toString());
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public static void main(String args[]) {
        new JFrame_14().show();
    }
   
    private javax.swing.JButton jButton1;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JTextField jTextField1;   
}
Avatar billede mannik Nybegynder
15. februar 2004 - 14:03 #2
Ville det evt. være bedre at have en editable ComboBox og så springe textfeltet over?
Avatar billede mannik Nybegynder
15. februar 2004 - 14:05 #3
Bump :o)

tak Carsten, jeg prøver lige, vender tilbage i aften
Avatar billede mannik Nybegynder
16. februar 2004 - 16:48 #4
tak Carsten, ville det evt. være mere korrekt at anvende en editable combobox, rent brugervenligt?
Avatar billede _carsten Nybegynder
16. februar 2004 - 17:42 #5
Tjaaaa - jeg vil mene at det afhænger af hvor mange komponenter der i forvejen bliver proppet ind i den gui, for brugeren skal på en eller anden måde vide at vedkommende kan tilføje elementer til listen ved at gøre et eller andet i comboboxen (tryk på Enter etc.)

Så er der mange komponenter ville jeg bruge editable combobox.

Er der få komponenter, vile jeg gøre som vi har gjort her, da det visuelt, stort set forklarer sig selv overfor brugeren
Avatar billede fbehrend Nybegynder
18. februar 2004 - 19:43 #6
Det du skal gøre er at lave din JComboBox editable og implementere historik i modellen til din JComboBox.

Hvis du er i tvivl om hvordan dette gøres, kan jeg give en dybere forklaring samt noget kode.
Avatar billede mannik Nybegynder
18. februar 2004 - 20:04 #7
fbehrend 

Tak. Det vil jeg være meget taknemlig for. Jeg bestemte mig for at bruge en editable combobox og fik det også til at virke, det er jo sådan at når man løser et problem så melder der sig nye spørgsmål. F.eks

Hvis jeg laver en JAR fil, kan jeg da gemme ændringer i programmet således at de bliver der når computeren slukkes uden at jeg skal rundt om en database?
Kan jeg med en If - forskellig fra - sætning forhindre at allerede eksisterende poster bliver tilføjet min liste?
Kan jeg lave en metode så jeg kan slette poster?

Ja det er mange spørgsmål og meget arbejde for at få en combobox til at virke 8>)
Avatar billede fbehrend Nybegynder
23. februar 2004 - 10:49 #8
Hvis du har fået historikken til at virke springer jeg model implementeringen over.

Hvis du vil gemme historikken når computeren slukkes og du ikke vil gemme den i en database, kan du gemme den i en fil.

Her er lidt kode.

public class HistoryComboBox extends JComboBox {

  public HistoryComboBox() {
    super();
    setEditable(true);
  }

  public void add(String item) {
// I stedet for at bruge en if sætning for at finde ud af om item allerede
// findes kan du bare fjerne den og sætte den ind igen. På den måde vil du
// også altid have den sidst indtastede øverst.
    removeItem(item);
    insertItemAt(item, 0);
    setSelectedItem(item);
  }

  public void remove(String item) {
    removeItem(item);
// Hvis du ikke vil have valgt noget item efter at du har slettet et item
// skal du fjerne setSelectedItem.
    setSelectedItem(getItemAt(0));
  }

  public void loadHistory(String fileName) {
    try {
      File f = new File(fileName);
      if (!f.exists)) return;
      FileInputStream fs = new FileInputStream(f);
      ObjectInput stream = new ObjectInputStream(fs);
      Object o = stream.readObject();
      if (o instanceof ComboBoxModel) setModel((ComboBoxModel)o);
      stream.close();
      fs.close();
    } catch (Exception e) {
      e.printStackTrace();
      // Log eller håndter fejlen yderligere her.
    }
  }

  public saveHistory(String fileName) {
    try {
      FileOutputStream fs = new FileOutputStream(fileName);
      ObjectOutput stream = new ObjectOutputStream(fs);
      stream.writeObject(getModel());
      stream.flush();
      stream.close();
      fs.close();
    } catch (Exception e) {
      e.printStackTrace();
      // Log eller håndter fejlen yderligere her.
    }
}

Håber at det kunne hjælpe dig lidt videre på vejen mod din perfekte ComboBox :)
Avatar billede mannik Nybegynder
24. februar 2004 - 22:20 #9
Tak for hjælpen, det ser meget interessant ud jeg glæder mig til at prøve det
Du fortjener lidt point, se i listen så laver jeg lige et spørgsmål til dig!
8o)
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