Cher tous, J'ai un problème lors de la création d'une interface utilisateur sur Blackberry. D'abord, j'essaie de créer une classe ChatLayoutManager étendue à partir de la classe Manager. Ma mise en page a trois composants: topfield, champ principal et champ inférieur.Comment contrôler la classe de gestionnaire dans Blackberry
public class ChatLayoutManager extends Manager {
private Field bottomField;
private Field mainField;
private Field titleField;
public ChatLayoutManager(long style) {
super(style);
}
protected void sublayout(int width, int height) {
setExtent(width, height);
int y = 0;
if (bottomField != null) {
layoutChild(bottomField, width, height);
// This goes at the bottom of the screen
setPositionChild(bottomField, 0, height-bottomField.getHeight());
height -= bottomField.getHeight();
}
if (titleField != null) {
layoutChild(titleField, width, height);
// This goes at the top of the screen
setPositionChild(titleField, 0, 0);
height -= titleField.getHeight();
y += titleField.getHeight();
}
if (mainField != null) {
layoutChild(mainField, width, height);
// This goes just below the title field (if any)
setPositionChild(mainField, 0, y);
}
}
public void setMainField(Field f) {
mainField = f;
add(f);
}
public void setBottomField(Field f) {
bottomField = f;
add(f);
}
public void setTitleField(Field f) {
titleField = f;
add(f);
}
Puis je créer un autre champ (Chatfield) prolongée du directeur à ajouter à Mainfield dans la classe ChatLayoutManager que j'ai créé ci-dessus.
public class ChatField extends Manager{
private Field _contentField[];
protected ChatField(){
super(Manager.HORIZONTAL_SCROLL | Manager.VERTICAL_SCROLL);
}
// TODO Auto-generated constructor stub}
protected synchronized void sublayout(int width, int height) {
// TODO Auto-generated method stub
setExtent(width, height);
int x = 0;
int y = 0;
if(_contentField.length > 0){
for(int i = 0 ;i<_contentField.length; i++){
//if(getManager() == this){
this.layoutChild(_contentField[i],
_contentField[i].getWidth(),
_contentField[i].getHeight());
this.setPositionChild(_contentField[i], x, y);
if(_contentField[i++]!= null){
if ((_contentField[i].getWidth() + _contentField[i].getWidth())
>= width){
x = 0;
y += _contentField[i].getHeight();
}
else{
x += _contentField[i].getWidth();
}
}
//}
}
}
}
public void setContentField(Field field[]){
_contentField = field;
}
}
Et maintenant, quand je crée des champs (tels que TextField, BitmapField ...) ajouté à Chatfield, le programme a une erreur « champ n'est pas un enfant de ce gestionnaire ». La raison en est lorsque le cadre invoque la sublayout fonction du Chatfield classe, quand sublayout commence à appeler layoutChild fonction le gestionnaire de champ n'est pas Chatfield mais ChatlayoutManager.
J'ai du mal à essayer de résoudre ce problème, mais je n'ai toujours pas de solution. Quelqu'un peut-il me donner des suggestions? J'apprécie beaucoup.
d'accord, il y a aussi un bogue dans 'if (_contentFields [i ++]! = Null) {' code, préférable d'utiliser 'if (i-1 <_contentFields.lenght) {' –