Toon posts:

[java] JComboBox met plaatje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo!

ik wil een statusbalk maken mbv een combobox zodat we deze kunnen uitklappen en een soort geschiedenis kunnen maken. Nu wil ik hier dus een bericht in plaatsen die vooraf gaat van een plaatje, die het type bericht weergeeft:

Afbeeldingslocatie: http://home.wanadoo.nl/noordzij/message.gif normaal bericht
Afbeeldingslocatie: http://home.wanadoo.nl/noordzij/warning.gif waarschuwing
Afbeeldingslocatie: http://home.wanadoo.nl/noordzij/error.gif Fout!

Nou dit is hartstikke leuk allemaal, maar ik krijg dit dus niet voor elkaar. Ik heb een BasicComboBoxRenderer interface gemaakt die de default icon voor deze renderer teruggeeft. Dan doet hij bij elk item dat ik aan de combobox toevoeg, hetzelfde plaatje. Maar ik krijg het dus niet voor elkaar om gewoon steeds een ander plaatje erin te stoppen.
Die tutorial: CustomComboBoxDemo van sun.com, zet er van tevoren een aantal plaatjes in, maar dit is iets statisch, je kan er niet zomaar een ander plaatje inzetten. Hoe kan ik dit nu het beste oplossen?

THX! Dennis

Verwijderd

Topicstarter
Ik denk dat ik zoiets moet doen:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    ImageIcon error = new ImageIcon("error.gif");
    ImageIcon warning = new ImageIcon("warning.gif");
    ImageIcon message = new ImageIcon("message.gif");
    JComboBox jComboBoxStatusBar = new JComboBox();
    
    BasicComboBoxRenderer renderer = new BasicComboBoxRenderer(){
      public Icon setIcon(){
        if (test){
          return error;
        }
        else if(test){
          return warning;
        }
        else {
          return message;
        }
      }
    };
    jComboBoxStatusBar .setRenderer(renderer);


Maar wat voor test kan ik daar dan aan hangen?

Of moet ik dit helemaal anders aan gaan pakken?

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Ik denk dat je het best zelf een extensie van BasicComboBoxRenderer kunt maken. Vervolgens overschrijf je de methode getListCellRendererComponent als volgt:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public Component getListCellRendererComponent(JList list,
                                              Object value,
                                              int index,
                                              boolean isSelected,
                                              boolean cellHasFocus)
{
  JLabel label = (JLabel) super.getListCellRendererComponent();
  if( test on value )
  {
     label.setIcon( error );
  }
   //etc...
}

Die value is gelijk aan de waarde van list.getModel().getElementAt(index), ofwel van het item in de combobox op index index. Daaruit kun je neem ik aan genoeg informatie halen om het juiste icon te selecteren...

Verwijderd

Topicstarter
Toppie!

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  BasicComboBoxRenderer renderer = new BasicComboBoxRenderer(){
     public Component getListCellRendererComponent(JList list,
                                                    Object value,
                                                    int index,
                                                    boolean isSelected,
                                                    boolean cellHasFocus) {
        JLabel label = (JLabel)super.getListCellRendererComponent(list,
                                                                  value,
                                                                  index,
                                                                  isSelected,
                                                                  cellHasFocus);
        if (value.toString().endsWith("!")){
          label.setIcon(error);
        }
        else if (value.toString().endsWith(" ")){
          label.setIcon(warning);
        }
        else {
          label.setIcon(message);
        }
        return this;
     };
  };
  jComboBox1.setRenderer(renderer);


Ik eindig fout berichten dus met "!", waarschuwingen met een spatie en ik zorg dat de rest met iets anders eindigt.
De gebruiker merkt hier toch niets van.

Fantastisch!!! THX