2017-07-20 14 views
1

実際には、画像とテキストの両方をコンボボックスに追加します。私はそれを使用JLabelを持っているが、それはどのように私はこれを達成することはできません動作しません。ここで画像とテキストの両方をJavaのコンボボックスに追加するには

が私のコードです:ありがとう@MadProgrammer

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

が(HTTPS [カスタムレンダラを提供し、コンボボックスを使用する方法]を見てください見つける:// docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer)デモが可能な例があります – MadProgrammer

+0

モデルでコンポーネントをオブジェクトとして使用しないでください。モデルはデータのみを運ぶと考えられ、データの表示ビュー(この場合は 'JComboBox'とセルレンダラー)に更新されます – MadProgrammer

+0

私は賛成ですg [コンボボックスの使い方](https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer)は、この問題をトピックとして解決するための実例を提供しています。主な問題 – MadProgrammer

答えて

1

、私は私の答え

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(); 
    } 
} 
関連する問題