2016-11-08 1 views
1

은 내가 JFrame의스윙 - 사용자 정의 JComboBox에 항목

JComboBox itemsComboBox = new JComboBox(); 

내부하는 JComboBox를 생성 그리고

public class ItemCombo { 

    Product p; 

    public ItemCombo(Product p) { 
     this.p = p; 
    } 

    @Override 
    public String toString(){ 
     return p.getName(); 
    } 

    public Float getPrice() { 
     return p.getPrice(); 
    }  
} 

와 멀리 콤보 상자에 대한 내 지식을 간다, 지금은 가정 된 클래스를 생성

itemsComboBox.addItem(new ItemCombo(Product)); 

을 할 수 있지만, 그것은 문자열로 ItemCombo 개체를 변환 할 수 없습니다 말했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이 같은 사용자 지정 JComboBox를 만드는 또 다른 방법이 있습니까?

+0

아차, 대답 코드는 콤보 생성자에 –

답변

2

JComboBox가 아닌 JComboBox 모델에서 항목을 직접 추가/제거하는 것이 좋습니다. 따라서 DefaultComboBoxModel<ItemCombo> 개체를 만들고 JComboBox<ItemCombo>의 모델로 만듭니다. 그런 다음 모델에 항목을 추가하면 황금색이어야합니다. 예를 들어 : 개념 코드의

DefaultComboBoxModel<ItemCombo> comboModel = new DefaultComboBoxModel<>(); 
JComboBox<ItemCombo> itemsComboBox = new JComboBox<>(comboModel); // *** fixed *** 

// ...... 

comboModel.addItem(new ItemCombo(someProduct)); 

증명 :

import java.awt.Dimension; 
import javax.swing.*; 

public class TestCombo extends JPanel { 
    private static final Product[] products = { 
      new Product("One", 1.0), 
      new Product("Two", 2.0), 
      new Product("Three", 3.0), 
      new Product("Four", 4.0), 
      new Product("Five", 5.0), 
    }; 

    private DefaultComboBoxModel<ItemCombo> comboModel = new DefaultComboBoxModel<>(); 
    private JComboBox<ItemCombo> itemsComboBox = new JComboBox<>(comboModel); 

    public TestCombo() { 
     add(itemsComboBox); 
     for (Product product : products) { 
      comboModel.addElement(new ItemCombo(product)); 
     } 
     itemsComboBox.addActionListener(e -> { 
      ItemCombo itemCombo = (ItemCombo) itemsComboBox.getSelectedItem(); 
      System.out.println("Selection: " + itemCombo.getProduct()); 
     }); 

     setPreferredSize(new Dimension(400, 150)); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("TestCombo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new TestCombo()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 


class ItemCombo { 

    private Product product; 

    public ItemCombo(Product p) { 
     this.product = p; 
    } 

    @Override 
    public String toString(){ 
     return product.getName(); 
    } 

    public double getPrice() { 
     return product.getPrice(); 
    } 

    public Product getProduct() { 
     return product; 
    } 
} 

class Product { 

    private String name; 
    private double price; 

    public Product(String name, double price) { 
     this.name = name; 
     this.price = price; 
    } 

    public String getName() { 
     return name; 
    } 

    public double getPrice() { 
     return price; 
    } 

    @Override 
    public String toString() { 
     return "Product [name=" + name + ", price=" + price + "]"; 
    } 
} 
+0

감사합니다 모델을 통과해야 fixed--! 그것은 나에게 많은 도움이되었다! –

+0

@VitorCosta : 천만에. "proof of concept"코드에 대한 편집을 참조하십시오. –