JScrollPanes, JTextAreas y tamaños máximos

Contexto : en una aplicación de tarjeta de memoria flash, tengo una vista para a CardData(una estructura de datos que representa un lado de una tarjeta de memoria flash). Tiene, en su forma más básica, a String text. La vista (conocida como CardDataView) consiste texten ineditable JTextAreadentro de a JScrollPane.

En un momento, necesito alinear (verticalmente) un montón de estos CardDataViews, así que los coloqué en vertical Box.

Aquí está el problema: cuando expando la ventana desde su tamaño "preferido" (según lo determinado por pack) y luego la reduzco, el JScrollPane agrega una barra de desplazamiento horizontal y me permite desplazarme horizontalmente en el campo de texto. Esencialmente, está dimensionando el área de texto cuando no debería serlo.

Aquí está mi código (despojado y simplificado):

public class DebugTest {

    public static void main(String[] args) {
        CardDataView cdv = new CardDataView(new CardData(
                "Lorem ipsum dolor sit amet filler filler filler"));
        JFrame frame = new JFrame();
        frame.add(new JScrollPane(cdv), BorderLayout.CENTER);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

class CardData {
    private String text; // text on the card

    /*
     * NOTE: This class has been simplified for SSCCE purposes. It's not really
     * just a String field in production; rather, it has an image and other
     * properties.
     */

    public CardData(String text) {
        super();
        this.text = text;
    }

    public String getText() {
        return text;
    }

}

class CardDataView extends Box {
    private JTextArea txtrText; // the text area for the text

    /*
     * NOTE: As with CardData, this class has been simplified. It's not just a
     * JTextArea; it's also an ImageView (custom class; works fine), among other
     * things.
     */

    public CardDataView(CardData data) {
        super(BoxLayout.Y_AXIS);
        txtrText = new JTextArea();
        txtrText.setLineWrap(true);
        txtrText.setRows(3);
        txtrText.setEditable(false);
        txtrText.setWrapStyleWord(true);
        final JScrollPane scrollPane = new JScrollPane(txtrText);
        add(scrollPane);
        txtrText.setText(data.getText());
    }
}

Ahora, algo que realmente me confunde (a menos que lo haga mal) es que esencialmente alineo los datos y veo las clases, simplemente creando un área de texto con texto y un panel de desplazamiento (incluso con la configuración del mismo número de filas , la misma configuración de ajuste, etc.), se comporta como se esperaba. ¿Qué podría estar pasando?

Preocupaciones: - Todas las importaciones están en orden. - Si se pregunta por qué CardLayoutViewes un Box: en producción, tiene más que solo un cuadro de texto. El mismo error ocurre cuando es ay JPanelyo en setLayoutlugar de super. - El mismo problema ocurre si no uso la CardDataclase (y configuro el texto del área de texto manualmente).

¿Algunas ideas?

Respuesta 1

Actualmente estoy haciendo una tarea para mi curso de acceso en informática. A continuación he capturado el proyecto para contextos. Nuestro maestro nos dio fragmentos de codificación para comenzar. En este caso, nos dio ...

Digamos que tengo una clase con tres constructores, como el siguiente: public class ExampleClass {// constructor # 1 public ExampleClass (int a) {this (a, "aaa"); // "aaa" es solo un ...

Tengo un directorio de archivos de registro comprimidos basados ​​en texto, cada uno con muchos registros. En versiones anteriores de Hadoop, ampliaba MultiFileInputFormat para devolver un RecordReader personalizado que descomprimía ...

Estoy tratando de enumerar todos los archivos * .xml en el directorio. Primero hice un CD y luego intenté ejecutar: find. -type f -name * .xml Pero no estoy seguro de cómo hacerlo exactamente. Hubo algún ejemplo alrededor del ...