2011-11-30 22 views
22

द्वारा सेट करें, मैं चयनित इंडेक्स को जेसीम्बोबॉक्स में इंडेक्स नहीं मानता हूं। उसको कैसे करे? उदाहरणचयनित इंडेक्स JComboBox को मूल्य

public class ComboItem { 

    private String value; 
    private String label; 

    public ComboItem(String value, String label) { 
     this.value = value; 
     this.label = label; 
    } 

    public String getValue() { 
     return this.value; 
    } 

    public String getLabel() { 
     return this.label; 
    } 

    @Override 
    public String toString() { 
     return label; 
    } 
} 

JComboBox test = new JComboBox(); 
test.addItem(new ComboItem(0, "orange")); 
test.addItem(new ComboItem(1, "pear")); 
test.addItem(new ComboItem(2, "apple")); 
test.addItem(new ComboItem(3, "banana")); 
test.setSelectedItem("banana"); 

ठीक है, मैंने अपने प्रश्न को थोड़ा सा संशोधित कर दिया है। मैं भूल गया कि मेरे पास मेरे जेसीम्बोबॉक्स के अंदर एक कस्टम आइटम है जो इसे थोड़ा और कठिन बनाता है। मैं सेट नहीं कर सकता Item क्योंकि मेरे पास प्रत्येक आइटम के अंदर एक कॉम्बोइटम है। तो फिर भी, मैं यह कैसे कर सकता हूं?

+1

न उपयोग आवरण आइटम नहीं है।इसके बजाय एक कस्टम ListCellRenderer को कार्यान्वित करें जो घटक के मैपिंग को इसकी स्ट्रिंग प्रस्तुति – kleopatra

उत्तर

36

setSelectedItem("banana")। आप इसे the javadoc पढ़कर स्वयं पा सकते थे।

संपादित करें: चूंकि आपने प्रश्न बदल दिया है, इसलिए मैं अपना जवाब बदल दूंगा।

  1. दोहराएं आइटम के माध्यम से एक (या एक के सूचकांक) जो दिया है लगता है:

    आप आइटम "केला" लेबल होने का चयन करना चाहते हैं, तो आप दो समाधान है लेबल, और फिर setSelectedItem(theFoundItem) (या setSelectedIndex(theFoundIndex))

  2. अवहेलना equals और hashCodeComboItem में फोन इतना है कि एक ही नाम होने दो ComboItem उदाहरणों के बराबर हैं, और बस setSelectedItem(new ComboItem(anyNumber, "banana")) का उपयोग करें;
+0

पर खेद है, मुझे खेद है कि मुझे उस स्पष्ट कार्य को याद आया, लेकिन मैंने अपना प्रश्न अपडेट कर दिया है क्योंकि मैं भूल गया था कि मेरे पास मेरे combobox –

+3

में "सामान्य" आइटम नहीं हैं, दूसरा समाधान बहुत उपयोगी है, धन्यवाद। –

5

संग्रह क्यों नहीं लेते हैं, संभवतः एक मानचित्र जैसे हैश मैप, और इसे अपने कॉम्बो बॉक्स मॉडल क्लास के नाभिक के रूप में उपयोग करें जो कॉम्बोबॉक्स मॉडल इंटरफ़ेस लागू करता है? फिर आप अपने कॉम्बो बॉक्स के आइटम आसानी से इनट्स की बजाय अपने मुख्य स्ट्रिंग्स के माध्यम से एक्सेस कर सकते हैं।

उदाहरण के लिए ...

import java.util.HashMap; 
import java.util.Map; 

import javax.swing.ComboBoxModel; 
import javax.swing.event.ListDataListener; 

public class MyComboModel<K, V> implements ComboBoxModel { 
    private Map<K, V> nucleus = new HashMap<K, V>(); 

    // ... any constructors that you want would go here 

    public void put(K key, V value) { 
     nucleus.put(key, value); 
    } 

    public V get(K key) { 
     return nucleus.get(key); 
    } 

    @Override 
    public void addListDataListener(ListDataListener arg0) { 
     // TODO Auto-generated method stub 

    } 

    // ... plus all the other methods required by the interface 
} 
4
उदाहरण के लिए

enter image description here

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.SwingUtilities; 

public class ComboboxExample { 

    private JFrame frame = new JFrame("Test"); 
    private JComboBox comboBox = new JComboBox(); 

    public ComboboxExample() { 
     createGui(); 
    } 

    private void createGui() { 
     comboBox.addItem("One"); 
     comboBox.addItem("Two"); 
     comboBox.addItem("Three"); 
     JButton button = new JButton("Show Selected"); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(frame, "Selected item: " + comboBox.getSelectedItem()); 
       javax.swing.SwingUtilities.invokeLater(new Runnable() { 

        @Override 
        public void run() { 
         comboBox.requestFocus(); 
         comboBox.requestFocusInWindow(); 
        } 
       }); 
      } 
     }); 
     JButton button1 = new JButton("Append Items"); 
     button1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       appendCbItem(); 
      } 
     }); 
     JButton button2 = new JButton("Reduce Items"); 
     button2.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       reduceCbItem(); 
      } 
     }); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(4, 1)); 
     frame.add(comboBox); 
     frame.add(button); 
     frame.add(button1); 
     frame.add(button2); 
     frame.setLocation(200, 200); 
     frame.pack(); 
     frame.setVisible(true); 
     selectFirstItem(); 
    } 

    public void appendCbItem() { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       comboBox.addItem("Four"); 
       comboBox.addItem("Five"); 
       comboBox.addItem("Six"); 
       comboBox.setSelectedItem("Six"); 
       requestCbFocus(); 
      } 
     }); 
    } 

    public void reduceCbItem() { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       comboBox.removeItem("Four"); 
       comboBox.removeItem("Five"); 
       comboBox.removeItem("Six"); 
       selectFirstItem(); 
      } 
     }); 
    } 

    public void selectFirstItem() { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       comboBox.setSelectedIndex(0); 
       requestCbFocus(); 
      } 
     }); 
    } 

    public void requestCbFocus() { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       comboBox.requestFocus(); 
       comboBox.requestFocusInWindow(); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ComboboxExample comboboxExample = new ComboboxExample(); 
      } 
     }); 
    } 
} 
11
public static void setSelectedValue(JComboBox comboBox, int value) 
    { 
     ComboItem item; 
     for (int i = 0; i < comboBox.getItemCount(); i++) 
     { 
      item = (ComboItem)comboBox.getItemAt(i); 
      if (item.getValue().equalsIgnoreCase(value)) 
      { 
       comboBox.setSelectedIndex(i); 
       break; 
      } 
     } 
    } 

आशा इस मदद :)

6

आप मॉडल का उपयोग करना चाहिए

comboBox.getModel().setSelectedItem(object); 
1

बस कर के बाद comboBox.updateUI() फोन जी comboBox.setSelectedItem या comboBox.setSelectedIndex या comboModel.setSelectedItem

+0

क्या आप अपने समाधान को आपके द्वारा प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर विस्तारित कर सकते हैं? – abarisone

2

एक आइटम जब बता गया कुछ वर्ग 'निर्माता की आबादी है चयनित स्थापित करने के लिए (के रूप में @milosz पोस्ट) सही तरीके से:

combobox.getModel().setSelectedItem(new ClassName(parameter1, parameter2)); 

में अपने मामले कोड होगा:

test.getModel().setSelectedItem(new ComboItem(3, "banana")); 
1
public boolean preencherjTextCombox(){ 
     int x = Integer.parseInt(TableModelo.getModel().getValueAt(TableModelo.getSelectedRow(),0).toString()); 

     modeloobj = modelosDAO.pesquisar(x); 
     Combmarcass.getModel().setSelectedItem(modeloobj.getMarca()); 
     txtCodigo.setText(String.valueOf(modeloobj.getCodigo())); 
     txtDescricao.setText(String.valueOf(modeloobj.getDescricao())); 
     txtPotencia.setText(String.valueOf(modeloobj.getPotencia())); 

     return true; 
    } 
संबंधित मुद्दे