2016-04-13 26 views
0

Kendi "toString" yöntemine sahip olan nesnelerle yüklü JComboBox var. Bu combobox, bu combobox'ta bu nesnelerin "ActionListener" ile seçilmesi ve iadesi için kullanılır. Tüm çalışanlar, bu combobox'a metin yazarak ve "Gönder" butonu ile yeni nesneler eklemek için fonksiyon eklemeye karar verene kadar iyi çalıştı. Örneğin Bu JComboBox'ta yazılan metni JComboBox'ta nesne olarak ekle

,

benim sınıftır: Ben combobox metin "Bazı test metni" yazıp göndermek

public class SomeCustomClass { 
    private int id; 
    private String name; 

    public SomeCustomClass(String name){ 
     this.name = name; 
    } 
    // getters and setters here 
} 

, ben yeni nesne ile bu kutuyu istiyorum "SomeCustomClass ", ad =" Bazı test metni ".

Varyant 1 Dize ile SomeCustomClass döküm yönteminden bazı özel öğeler oluşturun. Mümkün mü? Bu iyi bir fikir mi?

Varyant 2, combobox tetikleyiciler ActionListener önce bir Dize yakalamak metin ile yeni bir SomeCustomClass nesnesi yapmak ve tekrar combobox itin bir yolunu bulun. Ama nasıl? JComboBox için getString (getText) yöntemini bulamadım.

Varyant 3 Fikirleriniz ...

ben tür Java için yeni değilim, ben bir şey kaçırmıştım olabilir.

+0

nasıl 'tanımlanabilir id' olurdu (varsayarak bir DefaultComboBoxModel kullanıyorsanız)? Şimdiye kadar gördüğüm kadarıyla, tüm sahip olduğunuz – MadProgrammer

+0

metnidir. Kurucunun bazı varsayılan 'id'lerini ekleyebilirim ya da 'null' ile bırakın ya da tanımlı değilse' id 'oluşturmak için fonksiyon ekleyin. – AndriiL

cevap

1

Yani, test 10 dakika içinde bunu buldum ... değeri yoksa

  • JComboBox#getSelectedVaue bir String dönecektir değer modelinde yoksa

    • JComboBox#getSelectedIndex-1 dönecektir

    Bu özelliklerden birini (veya her ikisini) kullanarak, modelde var olan değerin ne zaman olduğunu bilmeniz gerekir. Böyle olmazsa, sen String değeri geçen ve JComboBox eklemeden, yeni bir nesne oluşturmak mümkün olmalıdır

    import java.awt.Dimension; 
    import java.awt.EventQueue; 
    import java.awt.GridBagLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.DefaultComboBoxModel; 
    import javax.swing.JComboBox; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.UIManager; 
    import javax.swing.UnsupportedLookAndFeelException; 
    
    public class Test { 
    
        public static void main(String[] args) { 
         new Test(); 
        } 
    
        public Test() { 
         EventQueue.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           try { 
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
           } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
            ex.printStackTrace(); 
           } 
    
           JFrame frame = new JFrame("Testing"); 
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
           frame.add(new TestPane()); 
           frame.pack(); 
           frame.setLocationRelativeTo(null); 
           frame.setVisible(true); 
          } 
         }); 
        } 
    
        public class TestPane extends JPanel { 
    
         public TestPane() { 
          setLayout(new GridBagLayout()); 
          DefaultComboBoxModel<Fruit> fruitModel = new DefaultComboBoxModel<>(); 
          fruitModel.addElement(new Fruit("Apple")); 
          fruitModel.addElement(new Fruit("Banana")); 
          fruitModel.addElement(new Fruit("Grapes")); 
          fruitModel.addElement(new Fruit("Pears")); 
          JComboBox cb = new JComboBox(fruitModel); 
          cb.setEditable(true); 
          add(cb); 
          cb.addActionListener(new ActionListener() { 
           @Override 
           public void actionPerformed(ActionEvent e) { 
            int index = cb.getSelectedIndex(); 
            Object value = cb.getSelectedItem(); 
            if (!(value instanceof Fruit)) { 
             System.out.println(value + " is not a fruit"); 
             cb.addItem(new Fruit(value.toString())); 
            } else { 
             System.out.println(value + " is a fruit"); 
            } 
           } 
          }); 
         } 
    
         @Override 
         public Dimension getPreferredSize() { 
          return new Dimension(200, 200); 
         } 
    
        } 
    
        public class Fruit { 
         private String name; 
    
         public Fruit(String name) { 
          this.name = name; 
         } 
    
         public String getName() { 
          return name; 
         } 
    
         @Override 
         public String toString() { 
          return getName(); 
         } 
    
        } 
    
    } 
    
  • +0

    Çok teşekkürler! Şimdi nesneleri ve dizeleri ayrı ayrı ele alabilirim – AndriiL