Codename One - 扩展CheckBox以创建SpanToggleCheckBox

时间:2018-04-27 11:19:26

标签: codenameone

我需要切换多行按钮,因为其中一些按钮很长。我试图扩展CheckBox以创建SpanToggleCheckBox,但它不起作用,因为没有显示文本。以下代码有什么问题?我怎样才能达到目的呢?

public class SpanToggleCheckBox extends CheckBox {

    private TextArea textArea;

    /**
     * Constructs a toggle checkbox with the given text
     *
     * @param text to display
     */
    public SpanToggleCheckBox(String text) {
        textArea = new TextArea(getUIManager().localize(text, text));
        textArea.setActAsLabel(true);
        textArea.setColumns(textArea.getText().length() + 1);
        textArea.setUIID("Label");
        textArea.setEditable(false);
        textArea.setFocusable(false);
        this.setUIID("CheckBox");
        super.setToggle(true);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void paint(Graphics g) {
        getUIManager().getLookAndFeel().drawTextArea(g, textArea);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Dimension calcPreferredSize() {
        return getUIManager().getLookAndFeel().getTextAreaSize(textArea, true);
    }

    /**
     * Shorthand for creating the SpanToggleCheckBox
     *
     * @param text the text for the button
     * @return a check box
     */
    public static SpanToggleCheckBox createToggle(String text) {
        SpanToggleCheckBox cb = new SpanToggleCheckBox(text);
        return cb;
    }

}

1 个答案:

答案 0 :(得分:1)

我用不同的approch解决了这个问题。 在代码中,我替换为代码行:

Component button = CheckBox.createToggle(label);

这些行:

CheckBox myBtn = CheckBox.createToggle("text");
Container container = new Container(BoxLayout.y());
container.setLeadComponent(myBtn);
SpanLabel multiLineText = new SpanLabel(label);
container.add(multiLineText);

通过这种方式,我得到了一个像Toggle Button一样的Container,它包含一个带有多行文本的SpanLabel。