Avatar billede heungsu Nybegynder
28. maj 2006 - 16:30 Der er 3 kommentarer og
1 løsning

drop down box resizesing

Hej
Jeg har et problem med en dropdown box. Jeg har lavet den inde i et JPanel, men den tekst der står i den er for lang til at det kan være  der, så der bliver bare cuttet noget af dropdown boxen i begge ender, hvilket gør den utrolig grim.
Hvis jeg prøver at lave noget BorderLayout på den, så bliver den ikke cuttet af, men når jeg så bruger den, viser den ikke hele teksten som er i de forskellige ting der kan vælges.
Det jeg gerne vil have er altså at dropdown boxen bliver "skrumpet", men at jeg stadig har mulighed for at se hele teksten på elementerne når jeg trykker på den (den må altså gerne være stor her).
Avatar billede _carsten Nybegynder
28. maj 2006 - 17:50 #1
Er det sådan noget du går efter ???

import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JComboBox;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
import javax.swing.plaf.metal.MetalComboBoxUI;

/**
*
* @author  CFH
*/
public class TestJComboBox extends javax.swing.JFrame {
   
    /** Creates new form TestJComboBox */
    public TestJComboBox() {
        initComponents();
        combo.setUI(new ExpandComboBoxUI(combo, 300));
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
        combo = new javax.swing.JComboBox();

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

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        combo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        getContentPane().add(combo);

        pack();
    }// </editor-fold>
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestJComboBox().setVisible(true);
            }
        });
    }
   
    // Variables declaration - do not modify
    private javax.swing.JComboBox combo;
    // End of variables declaration
   
}



/*
* ExpandComboBoxUI.java
*
* Created on 28. maj 2004, 16:37
*/


/**
*
* @author  Carsten F. Hansen
*/
class ExpandComboBoxUI extends MetalComboBoxUI {
   
    /** Creates a new instance of ExpandComboBoxUI */
    public ExpandComboBoxUI(JComboBox combo, int minSize) {
        this.combo = combo;
        this.minSize = minSize;
    }
   
    protected ComboPopup createPopup() {
       
        BasicComboPopup popup = new BasicComboPopup( combo ) {

            public void show() {
                Dimension popupSize = getPopupSize();
                popupSize.setSize( popupSize.width,
                                    getPopupHeightForRowCount(
                                                combo.getMaximumRowCount() ) );
               
                Rectangle popupBounds = computePopupBounds( 0,
                                                            combo.getBounds().height,
                                                            popupSize.width,
                                                            popupSize.height);
       
                scroller.setMaximumSize( popupBounds.getSize() );
                scroller.setPreferredSize( popupBounds.getSize() );
                scroller.setMinimumSize( popupBounds.getSize() );

                list.invalidate();           
                int selectedIndex = combo.getSelectedIndex();
                   
                    if ( selectedIndex == -1 )
                        list.clearSelection();
                    else
                        list.setSelectedIndex( selectedIndex );
                           
                list.ensureIndexIsVisible( list.getSelectedIndex() );
                setLightWeightPopupEnabled(combo.isLightWeightPopupEnabled() );

                show( combo, popupBounds.x, popupBounds.y );
            }
        };
        popup.getAccessibleContext().setAccessibleParent( combo );
        return popup;
    }
   
    private Dimension getPopupSize() {
        Dimension size = combo.getSize();
        if (size.width < minSize)
            return new Dimension(minSize, size.height);
        else
            return new Dimension(size.width, size.height);
    }
   
    private JComboBox combo;
    private int popupSize;
    private int minSize;
}
Avatar billede _carsten Nybegynder
29. maj 2006 - 16:30 #2
Er du kommet videre ?
Avatar billede heungsu Nybegynder
18. oktober 2010 - 11:16 #3
Jeg tror aldrig jeg så dit svar. Vil du give et svar så får du point.
Avatar billede _carsten Nybegynder
18. oktober 2010 - 20:16 #4
Det er efterhånden nogle år siden jeg sidst har været her inde, så tag dem bare selv. :)
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