Pregunta

Tengo el mismo problema con dos componentes JTextField y JComboBox, que asumirá la solución que estoy buscando lo resolvería de todos los componentes.

I han establecido el tamaño de los componentes por defecto así sus ajustes de tamaño del contenido inicial I suministrada a la misma. cuando cambio el contenido de un componente que excede la región del componente, no puedo ver todo el texto, y me gustaría que mi componente para cambiar el tamaño para ajustarse al texto.

¿Cómo puedo lograr eso?

Actualización:

El pack () en el marco de solamente amplió el campo de texto, ¿cómo puedo hacer lo mismo y ampliar el cuadro combinado?

Actualización:

    private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
    private static final long serialVersionUID = 752379460716217273L;
    Dimension maxSize=new Dimension();
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        setText(value.toString());
        Dimension size = getPreferredSize();
        if(maxSize.width<size.width)
            maxSize.width=size.width;
        if(maxSize.height<size.height)
            maxSize.height=size.height;

        resolutionDescriptor_ComboBox.setPreferredSize(maxSize);
        return this;
    }

}

esto funciona, no es muy eficiente, pero es un primer paso, que es, no se necesita la imagen del botón en consideraciones de tamaño, por lo que algunos de los textos aún no se muestra, pero los cambia el tamaño de los componentes, ¿tiene alguna sugerencias?

Adam.

Respuesta:

Esto hizo el truco junto con un paquete (), sin revalidación necesario.

    private class ComboBoxRenderer extends JLabel implements ListCellRenderer {
    private static final long serialVersionUID = 752379460716217273L;
    Dimension maxSize=new Dimension();
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        setText(value.toString());
        Dimension size = getPreferredSize();
        if(maxSize.width<size.width) {
            maxSize.width=size.width;
            resolutionDescriptor_ComboBox.setPrototypeDisplayValue(value.toString());
        }
        if(maxSize.height<size.height)
            maxSize.height=size.height;

        return this;
    }

}

Asegúrese que diseñar algo más eficiente, entonces este ...

Actualización:

y no hay necesidad de que el pack ()!

Adam.

¿Fue útil?

Solución

JComboBox ha setPrototypeDisplayValue(Object) que se utiliza para anchura preferida de componente calcular en base a la longitud del parámetro. Probar eso.

Y en vez de pack() junto con un poco de uso doLayout() revalidate() o repaint()

Otros consejos

Haga un paquete () en el marco

Para cambiar el tamaño del cuadro combinado que puede probar:

comboBox.setModel( comboBox.getModel() );

Creo que esto debería hacer que el tamaño preferido del cuadro combinado que se vuelve a calcular. Por supuesto, usted entonces necesita hacer el paquete () de nuevo.

Editar:

Se ha añadido una SSCCE simple que muestra esta obra:

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

public class ComboBoxTest3 extends JFrame implements ActionListener
{
    JComboBox comboBox;
    JTextField textField;

    public ComboBoxTest3()
    {
        String[] tabs = {"one", "two", "three", "four", "five", "six", "seven" };
        DefaultComboBoxModel model = new DefaultComboBoxModel(tabs);
        comboBox = new JComboBox( model );

        textField = new JTextField("hello");

        add(comboBox, BorderLayout.WEST );
        add(textField, BorderLayout.EAST );

        JButton button = new JButton("Pack");
        button.addActionListener( this );
        add(button, BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent e)
    {
        textField.setText("hello there!");
        comboBox.addItem("some longer text");
        comboBox.setModel( comboBox.getModel() );
        pack();
    }

    public static void main(String[] args)
    {
        JFrame frame = new ComboBoxTest3();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
     }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top