Как прокрутить форму, чтобы сделать указанный компонент видимым в LWUIT?
При добавлении компонента в форму я хочу, чтобы форма прокручивалась вниз, чтобы сделать этот добавленный компонент видимым.
Я предположил, что .scrollComponentToVisible()
был использован для этого, но у меня не работает.
Если вы запустите приведенный ниже пример кода, вы заметите, что компонент добавлен правильно и получает фокус. Тем не менее, это все еще за пределами visible
площадь экрана.
Обратите внимание на ряд:
form.scrollComponentToVisible(cont4);
Я думаю, что эта строка не так? Что я должен использовать вместо этого?
import javax.microedition.midlet.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.*;
public class ScrollTest extends MIDlet {
public void startApp() {
Display.init(this);
final Form form = new Form();
form.getStyle().setBgColor(0xff0000);
String text = "aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa" +
"aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa";
Container cont = new Container();
cont.setFocusable(true);
cont.getUnselectedStyle().setBgTransparency(0);
cont.getSelectedStyle().setBgTransparency(100);
TextArea area = new TextArea(text);
area.setEditable(false);
area.setFocusable(false);
area.getUnselectedStyle().setBgTransparency(0);
cont.addComponent(area);
form.addComponent(cont);
Container cont2 = new Container();
cont2.setFocusable(true);
cont2.getUnselectedStyle().setBgTransparency(0);
cont2.getSelectedStyle().setBgTransparency(100);
TextArea area2 = new TextArea(text);
area2.setEditable(false);
area2.setFocusable(false);
area2.getUnselectedStyle().setBgTransparency(0);
cont2.addComponent(area2);
form.addComponent(cont2);
Container cont3 = new Container();
cont3.setFocusable(true);
cont3.getUnselectedStyle().setBgTransparency(0);
cont3.getSelectedStyle().setBgTransparency(100);
TextArea area3 = new TextArea(text);
area3.setEditable(false);
area3.setFocusable(false);
area3.getUnselectedStyle().setBgTransparency(0);
cont3.addComponent(area3);
form.addComponent(cont3);
Command add = new Command("Add");
form.addCommand(add);
form.addCommandListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Container cont4 = new Container();
cont4.setFocusable(true);
cont4.getSelectedStyle().setBgColor(0xff0000);
TextArea area4 = new TextArea("This should get focus and be visible when added");
area4.setEditable(false);
area4.setFocusable(false);
cont4.getUnselectedStyle().setBgTransparency(0);
cont4.getSelectedStyle().setBgTransparency(100);
cont4.addComponent(area4);
form.addComponent(cont4);
form.repaint();
cont4.requestFocus();
form.scrollComponentToVisible(cont4);
}
});
form.show();
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void actionPerformed(ActionEvent ae) {
notifyDestroyed();
}
}
1 ответ
Если контейнер, который вы хотите добавить при каждом клике, один и тот же, вы можете использовать средство отображения ячеек List и custom list, как в примере кода ниже.
setScrollToSelected списка может использоваться для фокуса и прокрутки до последнего добавленного элемента.
public class ScrollTest extends MIDlet {
private List myList;
private ListModel mListModel;
private int i = 0;
public void startApp() {
Display.init(this);
Form form = new Form();
form.setLayout(new BorderLayout());
form.setScrollableY(false);
form.getStyle().setBgColor(0xff0000);
myList = new List();
CustomListRenderer mRenderer = new CustomListRenderer();
myList.setListCellRenderer(mRenderer);
mListModel = new DefaultListModel();
myList.setModel(mListModel);
myList.setFixedSelection(List.FIXED_NONE_ONE_ELEMENT_MARGIN_FROM_EDGE);
myList.setSmoothScrolling(true);
myList.setScrollToSelected(true);
form.addComponent(BorderLayout.CENTER, myList);
Command add = new Command("Add");
form.addCommand(add);
form.addCommandListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
mListModel.addItem(" Item #" + (i++));
myList.setSelectedIndex(mListModel.getSize() - 1);
myList.setScrollToSelected(true);
}
});
form.show();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
private class CustomListRenderer extends Container implements
ListCellRenderer {
TextArea area;
Label focus = new Label();
public CustomListRenderer() {
this.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
area = new TextArea();
area.setEditable(false);
area.setFocusable(false);
this.addComponent(area);
this.getStyle().setBgColor(0xff0000);
this.getSelectedStyle().setBgColor(0xff6600);
}
public Component getListCellRendererComponent(List list, Object value,
int index, boolean isSelected) {
area.setText(value.toString());
return this;
}
public Component getListFocusComponent(List arg0) {
focus.getStyle().setBgColor(0xff6600);
return focus;
}
}
}