Граница Blackberry GridFieldManager - PullRequest
       18

Граница Blackberry GridFieldManager

0 голосов
/ 19 августа 2011

Я создал GridFieldManager в своем приложении Blackberry и хочу установить границу для каждой ячейки, чтобы сетка выглядела как сетка Excel.

Я использовал:

gridFieldManager.setBorder (BorderFactory.createSimpleBorder (новые XYEdges (0, 0, 0, 0), Border.STYLE_DASHED));

Но это просто устанавливает границу вокруг менеджера, а не каждой ячейки.

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Просто установите границу для каждого Field, который вы добавляете в GridFieldManager.

Создайте метод, который сначала добавляет, устанавливает границу для Field, которая добавляется в менеджер, а затем передает егодобавить().Или подкласс из GridFieldManager и переопределение add(Field f), чтобы установить границу для добавляемого Field (f), а затем вызвать super.add(f).

0 голосов
/ 13 марта 2012

Я использую следующий код для создания пользовательского интерфейса для игры в кроссворд ... Я настроил сетку, у нее все еще есть некоторые проблемы (проблемы с прокруткой), но она должна хотя бы дать вам несколько идей о том, что делать:

public class GridField extends Field
{

int WIDTH = 0;
int HEIGHT = 0;
int x = 0;
int y = 0;
int numRows = 0;
int GRID_WIDTH = 30;
int GRID_HEIGHT = 30;
int fill_width=20;
int fill_height=20;
int currentColumn = 0;
int currentRow = 0;
public String[][] values = null;
int[][] numbers = null;
private Font numericFont = null;
private Font alphabetFont = null;  
Graphics G;
int clu = 0;
int length=0;
char di;

public GridField(int width) {
    this.WIDTH = width;
    HEIGHT = 3;
}

public GridField(int width, int height) {
    super(Field.FOCUSABLE);
    this.WIDTH = width;
    HEIGHT = height;
}

public GridField(int width, int height, int numRows, String[][] values) {
    super(Field.FOCUSABLE);
    this.WIDTH = width;
    HEIGHT = height;
    this.numRows = numRows;
    this.values = values;
}

public GridField(int width, int height, int numRows, String[][] values,int[][] numbers) {
    super(Field.FOCUSABLE);

    this.WIDTH = width;
    HEIGHT = height;
    this.numRows = numRows;
    this.values = values;
    this.numbers=numbers;
}

public int getPreferredWidth()  
{  
    return WIDTH;  
}  

public int getPreferredHeight()  
{  
    return HEIGHT;  
}  

protected void onFocus(int direction)  
{  
    System.out.println("onfocus direction =====>"+direction);
}  

protected void onUnfocus()  
{  
    System.out.println("onunfocus direction =====>");
}  

protected void layout(int arg0, int arg1)  
{  
    setExtent(getPreferredWidth(), getPreferredHeight());  
}  

public void paint(int clue, int len, char dir)
{
    try {
        clu=clue;
        length=len;
        di=dir;
        FontFamily fontFamily = null;
        try {
            fontFamily = FontFamily.forName("Verdana");
        } catch (ClassNotFoundException cnfe) {
        }   
        numericFont = fontFamily.getFont(FontFamily.SCALABLE_FONT, 9);
        alphabetFont = fontFamily.getFont(FontFamily.SCALABLE_FONT, 13);    
        //G.clear();
        G.setColor(0x00ffffff);
        G.fillRect(0, 0, WIDTH, HEIGHT);
        G.setColor(0x00000000);
        y = 5;
        for(int i = 0; i < numRows; i ++ )
        {
            for(int j = 0; j < numRows; j ++ )
            {
                G.setColor(Color.BLACK);
                G.drawRect(x, y, GRID_WIDTH, GRID_HEIGHT);                 
                G.setColor(Color.BLUE);
                // G.setFont(alphabetFont);
                G.setFont(Utility.getInstance().getGujaratiFont("rekha", 4));
                // if(values[i][j]!=".")
                // G.drawText("" + values[i][j], x + 13, y + 11);
                if(values[i][j]!=".")
                    G.drawText("" + values[i][j], x + 5, y + 11);
                G.setColor(Color.BLACK);
                G.setFont(numericFont);
                if (numbers[i][j] == clue)
                {
                    currentColumn=j;
                    currentRow=i;
                    G.setColor(Color.RED);
                    G.fillRect(x, y, GRID_WIDTH, GRID_HEIGHT);

                    G.setColor(Color.ORANGE); 
                    if(dir=='a'||dir=='A')
                    {

                        G.drawRect(x+GRID_WIDTH, y, 30*(len-1), GRID_HEIGHT);   
                        //                      G.drawRect(x-1, y-1, 30*len+2, GRID_HEIGHT+2); 
                        //                      G.drawRect(x-2, y-2, 30*len+3, GRID_HEIGHT+3);  
                        //                      G.drawRect(x-3, y-3, 30*len+4, GRID_HEIGHT+4); 
                        G.fillRect(x+GRID_WIDTH, y, 30*(len-1), GRID_HEIGHT);
                    }
                    else
                    {
                        G.drawRect(x, y+GRID_HEIGHT, GRID_WIDTH, 30*(len-1));  
                        G.fillRect(x, y+GRID_HEIGHT, GRID_WIDTH, 30*(len-1));
                    }


                }

                G.setColor(Color.BLACK);
                if(numbers[i][j]!=0)
                    G.drawText("" + numbers[i][j],x + 2  ,y + 2);
                if(values[i][j] == "0"){
                    G.setColor(Color.BLACK);
                    G.fillRect(x, y, GRID_WIDTH, GRID_HEIGHT);
                    //Field.VISUAL_STATE_FOCUS;
                }
                x = x + GRID_WIDTH - 1;      
            }
            x = 0;
            y = y + GRID_HEIGHT - 1;    
        }
        //this.invalidate();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

protected void paint(Graphics g)
{

    FontFamily fontFamily = null;
    try {
        fontFamily = FontFamily.forName("Verdana");
    } catch (ClassNotFoundException cnfe) {
    }   
    try {
        numericFont = fontFamily.getFont(FontFamily.SCALABLE_FONT, 9);
        alphabetFont = fontFamily.getFont(FontFamily.SCALABLE_FONT, 13);
        G=g;
        g.setColor(0x00ffffff);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(0x00000000);
        y = 5;
        for(int i = 0; i < numRows; i ++ )
        {
            for(int j = 0; j < numRows; j ++ )
            {
                g.setColor(Color.BLACK);
                g.drawRect(x, y, GRID_WIDTH, GRID_HEIGHT);  
                if (clu != 0)
                {
                    if (numbers[i][j] == clu)
                    {
                        currentColumn=j;
                        currentRow=i;
                        G.setColor(Color.RED);
                        G.fillRect(x, y, GRID_WIDTH, GRID_HEIGHT);

                        G.setColor(Color.ORANGE); 
                        if(di=='a'||di=='A')
                        {

                            G.drawRect(x+GRID_WIDTH, y, 30*(length-1), GRID_HEIGHT);   
                            //                          G.drawRect(x-1, y-1, 30*len+2, GRID_HEIGHT+2); 
                            //                          G.drawRect(x-2, y-2, 30*len+3, GRID_HEIGHT+3);  
                            //                          G.drawRect(x-3, y-3, 30*len+4, GRID_HEIGHT+4); 
                            G.fillRect(x+GRID_WIDTH, y, 30*(length-1), GRID_HEIGHT);
                        }
                        else
                        {
                            G.drawRect(x, y+GRID_HEIGHT, GRID_WIDTH, 30*(length-1));  
                            G.fillRect(x, y+GRID_HEIGHT, GRID_WIDTH, 30*(length-1));
                        }
                    }
                    //clu=0;
                }

                if(i == currentRow && j == currentColumn)
                {
                    g.setColor(Color.RED);
                    g.fillRect(x, y, GRID_WIDTH, GRID_HEIGHT);
                }  
                g.setColor(Color.BLUE);
                g.setFont(Utility.getInstance().getGujaratiFont("rekha", 5));
                if(values[i][j]!=".")
                    g.drawText("" + values[i][j], x + 5, y + 11);
                g.setColor(Color.BLACK);
                g.setFont(numericFont);
                if(numbers[i][j]!=0)
                    g.drawText("" + numbers[i][j],x + 2  ,y + 2);
                if(values[i][j] == "0"){
                    g.setColor(Color.BLACK);
                    g.fillRect(x, y, GRID_WIDTH, GRID_HEIGHT);
                    //Field.VISUAL_STATE_FOCUS;
                }
                x = x + GRID_WIDTH - 1;      
            }
            x = 0;
            y = y + GRID_HEIGHT - 1;  

        }
        //clu=0;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


protected  int  moveFocus(int amount, int status, int time) {
    System.out.println("moveFocus -=======>");
    return amount;
}

protected  boolean navigationMovement(int dx, int dy, int status, int time) {
    clu = 0;
    System.out.println("navigationMovement -=======dx>"+dx);
    System.out.println("navigationMovement -=======dy>"+dy);
    if(dx == 1)
    {
        if(currentColumn < numRows - 1)
        {
            currentColumn ++;
        }
    }
    else if(dx == -1)
    {
        if(currentColumn > 0)
        {
            currentColumn --;
        }            
    }
    else if(dy == 1)
    {
        if(currentRow < numRows - 1)
        {
            currentRow ++;
        }
        else
            TabControlScreen.gridfocus();
    }
    else if(dy == -1)
    {
        if(currentRow > 0)
        {
            currentRow --;
        }
    }
    invalidate();
    return true;
}

public void drawText(String string) {

    try {
        System.out.println("inside keyChar ====>" + string);
        System.out.println("CurrentRow:::" + currentRow + "CurrentColumn:::"
                + currentColumn + "Values:::"
                + values[currentRow][currentColumn]);
        if (!values[currentRow][currentColumn].equalsIgnoreCase("0")) {
            values[currentRow][currentColumn] = string;// String.valueOf(string);
            System.out.println("GridField::Values::string::"+string);
            invalidate();
        } else
            Dialog.alert("Invalid Field!");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //return true;
}


public String getText() {
    return "";

}

public String returnText() {
    return values[currentRow][currentColumn];

}
...