Pregunta

Quiero un TextField no editable (o una subclase) que ni siquiera muestre el cursor. Alternativamente, quiero un LabelField multilínea. ¿Es posible alguno de estos?

¿Fue útil?

Solución

TextField sin cursor de enfoque

TextField readOnly = new TextField(NON_FOCUSABLE);
readOnly.setText("Read only, no carret");
add(readOnly);

TextField drawFocus override

Si el texto es demasiado grande para caber en la pantalla, puede anular el método drawFocus en TextField, por lo que el desplazamiento estará disponible:

TextField readOnly = new TextField(READONLY)
{
    protected void drawFocus(Graphics graphics, boolean on) {}
};

TextFields, separados con NullFields

Otra opción es dividir TextField en varios, separados con NullFields:

class Scr extends MainScreen {
    public Scr() {

        String text = "Lorem ipsum dolor sit amet, consectetuer "
                + "adipiscing elit, sed diam nonummy nibh euismod "
                + "tincidunt ut laoreet dolore magna aliquam erat "
                + "volutpat. Ut wisi enim ad minim veniam, quis "
                + "nostrud exerci tation ullamcorper suscipit "
                + "lobortis nisl ut aliquip ex ea commodo consequat. "
                + "Duis autem vel eum iriure dolor in hendrerit in "
                + "vulputate velit esse molestie consequat, vel "
                + "illum dolore eu feugiat nulla facilisis at vero "
                + "eros et accumsan et iusto odio dignissim qui "
                + "blandit praesent luptatum zzril delenit augue "
                + "duis dolore te feugait nulla facilisi.";

        text = addScrollText(text, 150);
    }

    private String addScrollText(String text, int partSize) {
        while (0 < text.length()) {
            int len = Math.min(partSize, text.length());
            TextField readOnly = new TextField(NON_FOCUSABLE);
            readOnly.setText(text.substring(0, len));
            add(readOnly);
            add(new NullField());
            text = text.substring(len);
        }
        return text;
    }
}

LabelField multilínea

Texto multilínea en LabelField, solo use el carácter de escape de nueva línea:

String text = "first line \nnew line \nanother line";
LabelField multiLine = new LabelField(text);
add(multiLine);

Otros consejos

Sí, puede anular el método de pintura de cada elemento de la interfaz de usuario

Un ejemplo:

public class WhiteLabelField extends LabelField 
{
    public WhiteLabelField()
    {
        super();
    }
    public WhiteLabelField(ObjectGroup text)
    {
        super(text);
    }
    public WhiteLabelField(Object text, long style)
    {
        super(text, style);
    }
    public void paint(Graphics _g)
    {
        _g.setColor(Color.WHITE);
        super.paint(_g);
    }
    // Custom
    public void setSmallFontSize()
    {
        setFont( Font.getDefault( ).derive( Font.PLAIN, 16 ));
    }
}

También puede usar un RichTextField con un estilo de Field.NON_FOCUSABLE y obtendrá lo que desea.

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