Chamar uma classe para um combobox da interface

8 respostas Resolvido
java
L

Desculpa fazer essa pergunta mas estou meio confuso. copiei um exemplo de código da net que coloca imagens com descrição em um combobox, mas no exemplo a pessoa criava um comobobox e como estou utilizando o da interface do netbeans, não soube chamar a classe para ele.

Segue o código:

package Cadastro;
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Font;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.ListCellRenderer;

    /*
     * CustomComboBoxDemo.java is a 1.4 application that uses the following files:
     *   images/Bird.gif
     *   images/Cat.gif
     *   images/Dog.gif
     *   images/Rabbit.gif
     *   images/Pig.gif
     */
    public class CustomComboBoxDemo extends JPanel {
        ImageIcon[] images;
        String[] petStrings = {"Critico", "Cat", "Dog", "Rabbit", "Pig"};

        /*
         * Despite its use of EmptyBorder, this panel makes a fine content
         * pane because the empty border just increases the panel's size
         * and is "painted" on top of the panel's normal background.  In
         * other words, the JPanel fills its entire background if it's
         * opaque (which it is by default); adding a border doesn't change
         * that.
         */
        public CustomComboBoxDemo() {
            super(new BorderLayout());

            //Load the pet images and create an array of indexes.
            images = new ImageIcon[petStrings.length];
            Integer[] intArray = new Integer[petStrings.length];
            for (int i = 0; i < petStrings.length; i++) {
                intArray[i] = new Integer(i);
                images[i] = createImageIcon("/images/" + petStrings[i] + ".png");
                if (images[i] != null) {
                    images[i].setDescription(petStrings[i]);
                }
            }
        }

        /** Returns an ImageIcon, or null if the path was invalid. */
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = CustomComboBoxDemo.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                    return null;
            }
        }

        /**
         * Create the GUI and show it.  For thread safety,
         * this method should be invoked from the
         * event-dispatching thread.
         */
      

        class ComboBoxRenderer extends JLabel
                               implements ListCellRenderer {
            private Font uhOhFont;

            public ComboBoxRenderer() {
                setOpaque(true);
                setHorizontalAlignment(CENTER);
                setVerticalAlignment(CENTER);
            }

            /*
             * This method finds the image and text corresponding
             * to the selected value and returns the label, set up
             * to display the text and image.
             */
            public Component getListCellRendererComponent(
                                               JList list,
                                               Object value,
                                               int index,
                                               boolean isSelected,
                                               boolean cellHasFocus) {
                //Get the selected index. (The index param isn't
                //always valid, so just use the value.)
                int selectedIndex = ((Integer)value).intValue();

                if (isSelected) {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                } else {
                    setBackground(list.getBackground());
                    setForeground(list.getForeground());
                }

                //Set the icon and text.  If icon was null, say so.
                ImageIcon icon = images[selectedIndex];
                String pet = petStrings[selectedIndex];
                setIcon(icon);
                if (icon != null) {
                    setText(pet);
                    setFont(list.getFont());
                } else {
                    setUhOhText(pet + " (no image available)",
                                list.getFont());
                }

                return this;
            }

            //Set the font and text when no image was found.
            protected void setUhOhText(String uhOhText, Font normalFont) {
                if (uhOhFont == null) { //lazily create this font
                    uhOhFont = normalFont.deriveFont(Font.ITALIC);
                }
                setFont(uhOhFont);
                setText(uhOhText);
            }
        }
    }

Estou querendo chamar essa classe em um outro jframe também utilizado do netbeans para o combobox: “jComboBox4”

8 Respostas

D
Solucao aceita

É simples, clique com o botão direito do mouse na classe CustomComboBoxDemo e em “Compilar Arquivo”, depois abra o JFrame no modo “Projeto”, clique e arraste o CustomComboBoxDemo para o local onde ficará no JFrame.

L

deu certo, vlw!

L

no caso ele abriu tipo um painel, ai jogo dentro desse painel?

D

Após clicar e arrastar, vai aparecer o componente, como o CustomComboBoxDemo estende da classe JPanel, pode ser que tenha a aparência de um “painel”. Após adicionar o componente, tente executar, pode ser que apareça um pouco pequeno, então aumente o tamanho.

L

sim, aparece sim, mas no caso pra colocar ele linkado no meu combobox como faço? só arrasto o combo pra dentro desse painel?

D

Faltou parte no código que vc postou:

public CustomComboBoxDemo() {
    super(new BorderLayout());

    //Load the pet images and create an array of indexes.
    images = new ImageIcon[petStrings.length];
    Integer[] intArray = new Integer[petStrings.length];
    for (int i = 0; i < petStrings.length; i++) {
        intArray[i] = new Integer(i);
        images[i] = createImageIcon("images/" + petStrings[i] + ".gif");
        if (images[i] != null) {
            images[i].setDescription(petStrings[i]);
        }
    }

    //Create the combo box.
    JComboBox petList = new JComboBox(intArray);
    ComboBoxRenderer renderer= new ComboBoxRenderer();
    renderer.setPreferredSize(new Dimension(200, 130));
    petList.setRenderer(renderer);
    petList.setMaximumRowCount(3);

    //Lay out the demo.
    add(petList, BorderLayout.PAGE_START);
    setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}

O JComboBox é instanciado dentro pelo código onde está " JComboBox petList = new JComboBox(intArray); ", não sei se dar para criar e adicionar pelo modo “Projeto”.

www.java2s.com/Code/Java/Swing-JFC/CustomComboBoxwithImage.htm

D

Tentei aqui e não consegui, provavelmente não é possível. É mais fácil pegar a classe da net e passar da forma como disse antes. Usando o modo “projeto”, teria que criar duas ou três classes e alterar varias configurações nos componentes (que não sei quais seriam), ou seja, daria muito trabalho.

L

Entendi. Dessa maneira deu tudo certinho mesmo. Muito obrigado pela ajuda, tenha um bom dia!

Criado 16 de janeiro de 2018
Ultima resposta 16 de jan. de 2018
Respostas 8
Participantes 2