Список товаров JComboBox - PullRequest
       1

Список товаров JComboBox

1 голос
/ 29 января 2012

Мне интересно, как бы я изменил название списка предметов в моем JComboBox? Вот мой код, я хочу изменить его на Dog, Panda, beeвместо того, чтобы выбирать их путь.

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JComboBox;

public class ComboTest {

    private JLabel imageLabel;
    private JComboBox comboImage;

    private String[] names = {"images/dog.gif","images/bee.gif","images/Panda.gif"};
    private Icon[] icons = {
        new ImageIcon(getClass().getResource(names[0])),
        new ImageIcon(getClass().getResource(names[1])),
        new ImageIcon(getClass().getResource(names[2])),
    };

    public ComboTest(){
        initComponents();
    }

    public void initComponents(){
        JFrame frame = new JFrame("Test Combo");
        frame.setVisible(true);
        frame.setSize(320, 160);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        comboImage = new JComboBox(names);
        comboImage.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent event){
                if(event.getStateChange() == ItemEvent.SELECTED){
                    imageLabel.setIcon(icons[comboImage.getSelectedIndex()]);
                }
            }
        });

        frame.add(comboImage);
        imageLabel = new JLabel(icons[0]);
        frame.add(imageLabel);
    }
}

1 Ответ

2 голосов
/ 29 января 2012

Возможно, вы захотите создать объект с двумя свойствами: путь и текст, который вы хотите отобразить.

Затем вы установите метод toString для возврата свойства текста.Отказ от ответственности: я не тестировал ни один из этого кода.

public class ValueText {
   private String text;
   private String value;

   public ValueText(final String text, final String value) {
      this.text = text;
      this.value = value;
   }

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

   public String getValue() {
      return value;
   }
}

Тогда вы можете изменить свой исходный массив на что-то вроде:

private Object[] names = {
   new ValueText("Dog", "images/dog.gif"),
   new ValueText("Bee", "images/bee.gif"),
   new ValueText("Panda", "images/Panda.gif")
};

И он должен работать аналогично, только сейчаскогда вы проверяете выбранный элемент, вы можете использовать метод getValue(), чтобы получить путь.

Возможно, вас также заинтересует пользовательский рендер, но он, вероятно, не нужен для вашего использования: http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

Обновление Я сделаю исправление после того, как Клеопатра привел несколько убедительных аргументов в комментариях, которые вы должны прочитать ниже.

Более общий и понятный способэто можно сделать с помощью специального средства визуализации, даже если оно очень простое (см. ссылку выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...