2017-07-20 1 views
1

En fait, je veux ajouter une image et du texte à la fois dans la zone de liste déroulante. J'ai utilisé JLabel pour cela, mais cela ne fonctionne pas, alors comment puis-je y parvenir.Comment ajouter de l'image et du texte à la fois dans la zone de liste déroulante dans Java

Voici mon code:

package swing; 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.util.Vector; 

import javax.swing.ImageIcon; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class ComboBox { 
    public ComboBox() { 
    JFrame.setDefaultLookAndFeelDecorated(true); 
    JFrame frame = new JFrame("ComboBOx"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Container con = frame.getContentPane(); 
    JLabel ar[] = new JLabel[5]; 
    ar[0] = new JLabel("ganesh",new ImageIcon("/images/g.jpg"),JLabel.HORIZONTAL); 
    ar[1] = new JLabel("ganes",new ImageIcon("/images/g.jpg"),JLabel.HORIZONTAL); 
    ar[2] = new JLabel("gane",new ImageIcon("/images/g.jpg"),JLabel.HORIZONTAL); 
    ar[3] = new JLabel("gan",new ImageIcon("/images/g.jpg"),JLabel.HORIZONTAL); 
    ar[4] = new JLabel("ga",new ImageIcon("/images/g.jpg"),JLabel.HORIZONTAL); 

    JComboBox<JLabel> box = new JComboBox<JLabel>(ar); 
    con.add(box); 
    con.setBackground(Color.white); 
    con.setLayout(new FlowLayout()); 
    frame.setVisible(true); 
    frame.pack(); 
    } 
    public static void main(String args[]) { 
    new ComboBox(); 
    } 
} 
+1

Jetez un oeil à [Comment utiliser combobox, fournissant un moteur de rendu personnalisé] (https: // docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer) qui a un exemple démontrable – MadProgrammer

+0

Ne pas utiliser les composants comme objets dans les modèles, un modèle est supposé ne transporter que des données, la présentation des données est mise à jour à la vue (le 'JComboBox' et le rendu de cellule dans ce cas) – MadProgrammer

+0

Je suis votin g pour fermer cette question hors-sujet car [Comment utiliser les combos] (https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer) fournit un exemple qui résoudra numéro primaire – MadProgrammer

Répondre

1

@MadProgrammer Merci, je trouve ma réponse

package swing; 

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.util.Vector; 

import javax.swing.ImageIcon; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.ListCellRenderer; 

public class ComboBox { 
    ImageIcon imageIcon[] = { new ImageIcon("/images/g.jpg"), new ImageIcon("/images/g.jpg"), 
     new ImageIcon("/images/g.jpg"), new ImageIcon("/images/g.jpg"), new ImageIcon("/images/g.jpg") }; 
    Integer array[] = {1,2,3,4,5}; 
    String names[] = {"img1","img2","img3","img4","img5"}; 
    public ComboBox() { 
    JFrame.setDefaultLookAndFeelDecorated(true); 
    JFrame frame = new JFrame("ComboBOx"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Container con = frame.getContentPane(); 

    ComboBoxRenderar rendrar = new ComboBoxRenderar(); 

    JComboBox box = new JComboBox(array); 

    box.setRenderer(rendrar); 
    con.add(box); 

    con.setLayout(new FlowLayout()); 

    frame.setVisible(true); 
    frame.pack(); 
    } 
    public class ComboBoxRenderar extends JLabel implements ListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(JList list, 
                Object value, 
                int index, 
                boolean isSelected, 
                boolean cellHasFocus) { 
     int offset = ((Integer)value).intValue() - 1 ; 

     ImageIcon icon = imageIcon[offset]; 
     String name = names[offset]; 

     setIcon(icon); 
     setText(name); 

     return this; 
    } 


    } 
    public static void main(String args[]) { 
    new ComboBox(); 
    } 
}