Domanda

ho, lo stesso problema con due componenti JTextField e JComboBox, presumo la soluzione che sto cercando risolverebbe per tutti i componenti.

Ho impostare la dimensione dei componenti di default così le loro dimensioni si inserisce il contenuto iniziale ho fornito ad esso. quando cambio il contenuto di un componente supera la regione del componente, non riesco a vedere l'intero testo, e vorrei che la mia componente per ridimensionare per adattare il testo.

Come posso fare questo?

Aggiornamento:

Il pacco () sul telaio ampliato solo il campo di testo, come posso fare lo stesso e ingrandire la casella combinata?

Aggiornamento:

    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;
    }

}

Questo funziona, non molto efficiente, ma è un primo passo, cosa è, non ci vuole l'immagine del pulsante in considerazioni di dimensioni, in modo da una parte del testo non è ancora mostrato, ma le ridimensiona componenti, hai qualche suggerimenti?

Adam.

Risposta:

Questo ha fatto il trucco insieme a un pacchetto (), nessun rinnovo necessario.

    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;
    }

}

Assicurati di progettare qualcosa di più efficiente allora questo ...

Aggiornamento:

e non v'è alcuna necessità per il pacchetto ()!

Adam.

È stato utile?

Soluzione

JComboBox è setPrototypeDisplayValue(Object) metodo utilizzato per la larghezza preferita del componente calcola in base alla lunghezza del parametro. Prova questo.

E invece di pack() insieme utilizzo doLayout() con qualche revalidate() o repaint()

Altri suggerimenti

Fare un pack () sul telaio

Per ridimensionare la casella combinata si può provare:

comboBox.setModel( comboBox.getModel() );

Credo che questo dovrebbe causare la dimensione preferita della casella combinata per essere ricalcolato. Naturalmente si sarebbe quindi bisogno di fare il pack () di nuovo.

Modifica:

Aggiunto un semplice SSCCE che mostra questo funziona:

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 );
     }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top