поместите некоторое поле менеджера в качестве заполнителя в положение кнопки, затем добавьте FocusChangeListener для маркировки и используйте add / delete field на focusChanged чтобы показать / скрыть кнопку.
UPDATE
Поскольку каждое изменение фокуса в полях может изменить макет, лучше добавить прослушиватель в каждое поле, добавленное на экран и заполнитель:
class Scr extends MainScreen {
HorizontalFieldManager placeholder = new HorizontalFieldManager() {
public void add(Field field) {
if (field.getFocusListener() != null)
field.setFocusListener(null);
field.setFocusListener(focusListener);
super.add(field);
}
};
ButtonField buttonField = new ButtonField("button",
ButtonField.CONSUME_CLICK);
LabelField labelField = new LabelField("label", FOCUSABLE);
public Scr() {
add(placeholder);
add(labelField);
add(new LabelField("label2", FOCUSABLE));
}
public void add(Field field) {
if (!(field instanceof Manager)) {
if (field.getFocusListener() != null)
field.setFocusListener(null);
field.setFocusListener(focusListener);
}
super.add(field);
}
FocusChangeListener focusListener = new FocusChangeListener() {
public void focusChanged(Field field, int eventType) {
if (eventType == FOCUS_GAINED) {
if (field == labelField) {
if (buttonField.getManager() == null)
placeholder.add(buttonField);
} else if (field != buttonField)
placeholder.delete(buttonField);
}
}
};
}