Me preguntaba si hay una manera de establecer un control ComboBox’ ancho de tan amplio como el JPanel en el que esta.
Tengo el siguiente código fragmento:

    public newPanel() {
        setLayout(new GridLayout(2,0));

        String[] example = new String[] {"one, "two", "three", "four"};

        JComboBox cBox = new JComboBox(levels);
        cBox.setPreferredSize(new Dimension(300, 20));

        this.add(new JLabel("This is text that goes above the ComboBox:"));
        this.add(cBox);
    }

Puede ver que me dijo que quería que el ComboBox para ser 300px de ancho, pero hay una forma de establecer automáticamente es tan amplia como el Panel es en?
Algo así como cBox.setPreferredWidth(max); (sé que no existe, es sólo para mostrar mi forma de pensar).

InformationsquelleAutor hannesbelen | 2011-05-03

4 Comentarios

  1. 2

    hay una forma de establecer automáticamente es tan amplia como el Panel es en?

    Usted probablemente querrá dejar que el gestor de diseño tener cuidado con esto.

    Si no establecer el ancho preferido, GridLayout se asegúrese de que el cuadro combinado llena todo el panel en posición horizontal.

    Este fragmento…

    import java.awt.GridLayout;
    import javax.swing.*;
    
    class Test {
        public static void main(String[] args) {
    
            JFrame frame = new JFrame();
            JPanel panel = new JPanel();
            panel.setLayout(new GridLayout(2,0));
    
            String[] example = new String[] {"one", "two", "three", "four"};
    
            JComboBox cBox = new JComboBox(example);
            //cBox.setPreferredSize(new Dimension(300, 20));
    
            panel.add(new JLabel("This is text that goes above the ComboBox:"));
            panel.add(cBox);
            panel.setBorder(BorderFactory.createTitledBorder("Panel border"));
    
            frame.setContentPane(panel);
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
        }
    }

    …resultados en

    Cómo establecer el ancho de Java ComboBox tan amplio como el JPanel es en?

    Si este no es lo suficientemente flexible para usted, le recomiendo que utilice un GridBagLayout.

  2. 2

    Como algunos otros ya se señaló, haciendo que el comboBox llenar el espacio es apoyado por varios LayoutManagers. El exacta comportamiento es a la discreción del administrador de hormigón. No hay manera de evitar el aprendizaje de lo que están haciendo : -), a Continuación, decidir que el comportamiento que usted desea y elegir uno apropiado, no hay que olvidar que hay excelentes 3ª parte LayoutManagers alrededor.

    Adivinar un poco: desea que el comboBox se extienden a toda la anchura, pero mantiene su altura una «razonable» one-liner cuando el aumento de la altura del bastidor. BoxLayout puede hacer que, con un poco de ayuda de su código: se hace respecto de un componente máximo de sugerencia, siempre hay uno. Algunos componentes (como JLabel) devolver algo razonable, otros (como Jtree) no.

    A continuación es un fragmento de código que añade un tamaño máximo para el control comboBox.

        JComponent panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
    
        String[] levels = new String[] { "one", "two", "three", "four" };
    
        JComboBox cBox = new JComboBox(levels) {
    
            @Override
            public Dimension getMaximumSize() {
                Dimension dim = super.getMaximumSize();
                dim.height = getPreferredSize().height;
                return dim;
            }
    
        };
    
        panel.add(new JLabel("This is text that goes above the ComboBox:"));
        panel.add(cBox);
  3. 1

    Usted podría utilizar GridBagLayout como el gestor de diseño con el llenado de las restricciones HORIZONTALES:

    this.setLayout(new GridBagLayout());
    this.add(cBox,new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
  4. 1

    Puede hacer usando un BoxLayout y la visualización de los elementos de arriba a abajo.
    Se utilizará automáticamente su tamaño máximo

    Usted puede mirar que si usted quiere entender más profundamente :
    http://blogs.oracle.com/CoreJavaTechTips/entry/getting_to_know_boxlayout

        class newPanel extends JPanel{
            public newPanel(){
                setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    
                String[] levels = new String[] {"one", "two", "three", "four"};
    
                JComboBox cBox = new JComboBox(levels);
                //cBox.setPreferredSize(new Dimension(300, 20));
    
                add(new JLabel("This is text that goes above the ComboBox:"));
                add(cBox);
            }
       }

Dejar respuesta

Please enter your comment!
Please enter your name here