Avatar billede martinhrj Nybegynder
06. november 2002 - 10:34 Der er 17 kommentarer og
2 løsninger

Farve i combobox

Jeg vil gerne have lavet en combobox, hvor man kan vælge mellem forskellige farver. Men jeg syntes ikke lige at kunne finde ud af, hvordan jeg får vist farverne i box'en... kan det overhovedet lade sig gøre? Og hvis ja, hvordan?
Avatar billede di8leva Nybegynder
06. november 2002 - 11:01 #1
det nemmeste måde er nog med en ListCellRenderer.... vet du hvordan man anvænder dem?
Avatar billede martinhrj Nybegynder
06. november 2002 - 11:04 #2
Hmm... har aldrig prøvet det. Men det skulle vel være til at finde ud af :)
Avatar billede di8leva Nybegynder
06. november 2002 - 11:29 #3
lav en klass f.eks MyRenderer.java

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

public class MyRenderer extends JLabel implements ListCellRenderer
{
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        if(value != null)
      {
            setText(" " + value.toString());
            if(value.toString().equals("Green"))
                setBackground(Color.green);
            etc..........
      }
        else
        {
            setBackground(Color.white);
            setText("");
        }

        return this;
    }
}


og sedan på din combobox anvænder du metoden setRenderer(new MyRenderer())

easy eller hur? =)
Avatar billede martinhrj Nybegynder
06. november 2002 - 11:43 #4
Jeg syntes ikke helt det virker! Skal getListCellRendererComponent ikke kaldes?
Avatar billede di8leva Nybegynder
06. november 2002 - 11:46 #5
nix, det er en metode som kaldes automatiskt varje gång GUI skall tegnes

sætt in en System.out.println("hello"); precis føre return this; og se hvis det skrivs ud eller ikke...
Avatar billede martinhrj Nybegynder
06. november 2002 - 11:49 #6
Metoden bliver skam kørt! Men der kommer ingen farve i comboboxen...
Avatar billede di8leva Nybegynder
06. november 2002 - 11:59 #7
min dansk er ikke riktig 100% =) "skam kørt" betyder att den bliver kørt??

hvad lægger du in i din combobox?
Avatar billede martinhrj Nybegynder
06. november 2002 - 12:03 #8
Ja. Metoden bliver kørt. Jeg har prøvet at lægge tekst i min combobox og jeg har prøvet at lade være med at lægge noget i. Og farven er hele tiden grå.
Avatar billede swaq Nybegynder
06. november 2002 - 12:09 #9
Her er mit bud (det virker på min comp) Martinhrj har ret! getListCellRendererComponent køres automatisk og ved at overskrives denne metoden (altså definere den selv) kan du blandt andet sætte baggrund etc...

For at køre koden, skal du placere et par gif-filer i et bib.: C:\java\pics

Håber det virker på din :O)

/SWAQ

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class CustomComboBoxDemo extends JPanel {
    ImageIcon images[];

    public CustomComboBoxDemo() {

        File dir = new File("C:\\java\\pics");
        File[] filer = dir.listFiles();
        String picName;

        images = new ImageIcon[filer.length];

        for(int i = 0; i<filer.length ; i++){
            String temp = filer[i].toString();
            picName = temp.substring(13,temp.length()-4);
            images[i] = new ImageIcon(temp);
            images[i].setDescription(picName);
            temp = null;
        }

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

        // Layout the demo
        setLayout(new BorderLayout());
        add(petList, BorderLayout.NORTH);
        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
    }

    public static void main(String s[]) {
        JFrame frame = new JFrame("CustomComboBoxDemo");
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });

        frame.getContentPane().add(new CustomComboBoxDemo(),
                                  BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    class ComboBoxRenderer extends JLabel implements ListCellRenderer {
        public ComboBoxRenderer() {
            setOpaque(true);
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
        }


        public Component getListCellRendererComponent(
                                          JList list,
                                          Object value,
                                          int index,
                                          boolean isSelected,
                                          boolean cellHasFocus) {

            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
            //VOILA :-)
            setBackground(Color.green);

            ImageIcon icon = (ImageIcon)value;
            setText(icon.getDescription());
            setIcon(icon);
            return this;
        }


    }
}
Avatar billede swaq Nybegynder
06. november 2002 - 12:10 #10
ØHH... det var vist di8leva der havde ret, SORRY :-)
Avatar billede di8leva Nybegynder
06. november 2002 - 12:13 #11
denna kod virker utmærkt på min computer

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class TestFrame extends JFrame
{
    public TestFrame()
    {
        this.getContentPane().setLayout(null);
        this.getContentPane().setLocation(100, 100);
        this.setSize(500, 500);

        try
        {
            JComboBox box = new JComboBox();
            box.addItem("Green");
            box.addItem("Red");
            box.setBounds(100, 100, 300, 40);
            box.setRenderer(new MyRenderer());

            JButton button = new JButton("Da");
            button.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    System.exit(9);
                }
            });
            button.setBounds(100, 300, 300, 40);
            this.getContentPane().add(box);
            this.getContentPane().add(button);

        }
        catch(Exception e) { e.printStackTrace(); }
    }

    public static void main(String[] args)
    {
        new TestFrame().setVisible(true);
    }

    private class MyRenderer extends JLabel implements ListCellRenderer
    {
        public MyRenderer()
        {
            setOpaque(true);
        }
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            if(value != null)
            {
                setText(" " + value.toString());
                if(value.toString().equals("Green"))
                    setBackground(Color.green);
                else if(value.toString().equals("Red"))
                    setBackground(Color.red);
            }
            else
            {
                setBackground(Color.white);
                setText("");
            }

            return this;
        }
    }
}
Avatar billede swaq Nybegynder
06. november 2002 - 13:05 #12
-> di8leva
Nu er det vist kun i JComboBox at metoden setRenderer(...) findes?!? Hvad nu hvis vi ville vise farven i en firkant under ComboBoxen, sådan rent illustrativt i takt med at der vælges i boxen?
Problemet er, at setRenderer ikke findes for eksempelvis JLabel, jeg har siddet og rodet lidt med det, men kan ikke lige se hvordan den skal fikses...
Avatar billede dsj Nybegynder
06. november 2002 - 13:11 #13
Hvorfor vil du absolut bruge en Combobox til at vælge farver, hvorfor ikke bruge JFileChooser, som er en dialogboks der viser dig alle regnbuens farver...

Med mindre du har en pokkers god grund til at bruge en combobox, vil jeg foreslå du bruger JFileChooser i stedet :)
Avatar billede di8leva Nybegynder
06. november 2002 - 13:22 #14
-> swaq, førstår ikke riktig hvad du menar?
Avatar billede martinhrj Nybegynder
06. november 2002 - 13:37 #15
dsj>> Jeg går ud fra at du mener en JCollorChooser? Den bruger jeg ikke, da jeg gerne vil kunne vælge imellem nogle få, bestemte farver. Derfor tænkte jeg selv på JComboBox, men hvis du har andre idéer, så sig endelig til!
Avatar billede dsj Nybegynder
06. november 2002 - 13:46 #16
gah selvfølgelig mener jeg JColorChooser - copy/paste du ve....
Avatar billede swaq Nybegynder
06. november 2002 - 16:06 #17
-> di8leva
Mener blot: hvordan viser du den valgte farve i en firkant under boxen?
Avatar billede martinhrj Nybegynder
06. november 2002 - 20:34 #18
->swaq
Det var da egentlig en god idé! At vise farven i en box under comboboxen... Den tror jeg jeg hopper på! Jeg kan nemlig ikke helt få den der ListCellRenderer til at gøre som jeg vil...

di8leva og swaq får point! dsj... det hjalp ikke meget denne gang :)
Avatar billede dsj Nybegynder
06. november 2002 - 21:29 #19
sådan er det bare :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester