Avatar billede bris Nybegynder
24. juni 2004 - 10:58 Der er 9 kommentarer og
1 løsning

JComboBox scrollbar farver

Jeg har en JComboBox, som har en scrollbar ude i siden, når man skal vælge et item. Denne scrollbar kunne jeg godt tænke mig at få til at skifte baggrundsfarve. Hvordan gør jeg det?
Avatar billede mikkelbm Nybegynder
24. juni 2004 - 11:56 #1
Èn måde at gøre det på kunne være:

UIManager.put("ScrollBar.thumb", Color.white);
UIManager.put("ScrollBar.background", new Color(80,90,155));

Men ovenstående ændrer så farve i alle scrollbars.
Avatar billede _carsten Nybegynder
24. juni 2004 - 14:24 #2
Det kan godt lade sig gøre, men er kanon kringlet
Du skal lave din egen klasse som extender JComboBox,
herefter skal du lave en klasse som extender MetalComboBoxUI
og sætte UI på din combobox.

import javax.swing.JComboBox;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import javax.swing.plaf.metal.MetalComboBoxUI;
import java.awt.Color;


public class JFrame_4 extends javax.swing.JFrame {

    public JFrame_4() {
        initComponents();
        JScrollBar  bar = testCombo1.getBar();
        bar.setBackground(Color.red);
    }

    private void initComponents() {
        testCombo1 = new TestCombo();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        testCombo1.setMaximumRowCount(4);
        testCombo1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" }));
        getContentPane().add(testCombo1);

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new JFrame_4().show();
    }

    private TestCombo testCombo1;
}



public class TestCombo extends JComboBox{
    public TestCombo() {
        super();
        ui = new TestUI(this);
        setUI(ui);
    }
   
    public JScrollBar getBar(){
        return ui.getBar();
    }
   
    private TestUI ui;
}



class TestUI extends MetalComboBoxUI{
    public TestUI(JComboBox combo){
        this.combo = combo;
    }
   
    protected ComboPopup createPopup() {
        Scroll popup = new Scroll( combo );
        pane = popup.getScroller();
        return popup;
    }
   
    public JScrollBar getBar(){
        return pane.getVerticalScrollBar();
    }
    private JComboBox combo;
    private JScrollPane pane;
}



class Scroll extends BasicComboPopup{
    public Scroll(JComboBox combo){
        super(combo);
    }
   
    public JScrollPane getScroller(){
        return scroller;
    }
}
Avatar billede _carsten Nybegynder
24. juni 2004 - 19:21 #3
Kan du bruge noget af det ??
Avatar billede mikkelbm Nybegynder
01. juli 2004 - 18:38 #4
Det vil jeg også gerne vide :)
Avatar billede mikkelbm Nybegynder
10. august 2004 - 13:07 #5
Lukketid?
Avatar billede bris Nybegynder
02. september 2004 - 15:09 #6
Er der ikke nogen der vil svare og have point?
Avatar billede _carsten Nybegynder
02. september 2004 - 15:32 #7
Hmm - egentlig ved vi jo ikke om du kunne bruge noget af det, men jeg lægger da bare et svar.
Avatar billede mikkelbm Nybegynder
02. september 2004 - 15:32 #8
Hvilken løsning brugte du?
Avatar billede mikkelbm Nybegynder
05. september 2004 - 23:55 #9
?
Avatar billede mikkelbm Nybegynder
05. oktober 2004 - 21:46 #10
Lukketid?
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