Blackberry GridFieldManager不会覆盖整个屏幕宽度

Blackberry GridFieldManager不会覆盖整个屏幕宽度,blackberry,grid,fieldmanager,Blackberry,Grid,Fieldmanager,好的,我正在为blackberry Bold 9700开发,我正试图获得一个1X4网格(1行4列)来覆盖整个黑莓屏幕的宽度,但它一直很短。我的意思是,默认情况下,网格是向左对齐的,如果我可以让整个网格跨越整个宽度,这是很好的(那没关系)。一些开发者能告诉我我做错了什么吗?我以为您只是添加了GridFieldManager.USE_ALL_WIDTH在构造函数中声明一个新网格,但它仍然不适用于我 final class App3_MainScreen extends MainScreen { pr

好的,我正在为blackberry Bold 9700开发,我正试图获得一个1X4网格(1行4列)来覆盖整个黑莓屏幕的宽度,但它一直很短。我的意思是,默认情况下,网格是向左对齐的,如果我可以让整个网格跨越整个宽度,这是很好的(那没关系)。一些开发者能告诉我我做错了什么吗?我以为您只是添加了GridFieldManager.USE_ALL_WIDTH在构造函数中声明一个新网格,但它仍然不适用于我

final class App3_MainScreen extends MainScreen {
private int numColumns, size;
// Constructor
App3_MainScreen() {
    // declare a layout manager to take care of all the layout stuff
    numColumns = 4;
    size = 4;

    VerticalFieldManager vfm = new VerticalFieldManager();
    vfm.add(new LabelField("using all width & long label...", LabelField.ELLIPSIS | Field.FIELD_HCENTER));

    int borderHeight = Display.getHeight()/2;g
    int borderWidth = Display.getWidth()/2;

    Manager gridFieldManager = new GridFieldManager(1, 4, GridFieldManager.USE_ALL_WIDTH | GridFieldManager.AUTO_SIZE);    // 1 row and 4 columns
    gridFieldManager.add(new ButtonField(""+borderHeight, Field.FIELD_HCENTER));
    gridFieldManager.add(new ButtonField("222", Field.FIELD_HCENTER));
    gridFieldManager.add(new ButtonField("333", Field.FIELD_HCENTER));
    gridFieldManager.add(new ButtonField(""+borderWidth, Field.FIELD_RIGHT));

    // set padding around each buttonField - top=0, right=5, bottom=0, left=5
    gridFieldManager.setPadding(0, 5, 0, 5);
    int gfmHeight = 48 * (size / numColumns);
    gridFieldManager.setBorder(BorderFactory.createSimpleBorder(
            new XYEdges(borderHeight/10, 0, borderHeight/10, 0), // top, right, bottom, left
            Border.STYLE_DASHED));

    add(gridFieldManager);
}}

我在下面提供了一个例子,可以实现这一点。它基于您提供的原始代码,但是为了清晰起见,它被清理并变得通用

基本上,GridFieldManager不明确支持使用所有宽度。作为一个管理器,它继承了这个常量,但是它的文档并没有表示它是一个受支持的状态。最好的方法是依赖固定大小状态,并根据显示的大小(displayWidth/numColumns)计算每个列的宽度。然后可以使用GridFieldManager#setColumnProperty()定义列的固定宽度

确保考虑到应用于列的填充,您就可以开始了

希望这有帮助

/**
 * Shows an example implementation of how to have a GridFieldManager
 * sized to the width of the Display.
 */
final class ScreenWidthGridExample extends MainScreen
{
    /**
     * Number of rows in the grid.
     */
    private static final int NUM_ROWS = 1;

    /**
     * Number of columns in the grid.
     */
    private static final int NUM_COLUMNS = 4;

    /**
     * The grid's column padding.
     */
    private static final int COLUMN_PADDING = 5;

    /**
     * Toggle switch to show the border around the grid.
     */
    private static final boolean SHOW_BORDER = true;

    /**
     * Allocated a new instance of the ScreenWidthGridExample.
     */
    ScreenWidthGridExample() {
        // Set up the GridFieldManager
        GridFieldManager gfm =
                new GridFieldManager(NUM_ROWS, NUM_COLUMNS, 
                GridFieldManager.FIXED_SIZE);
        gfm.setColumnPadding(COLUMN_PADDING);
        if(SHOW_BORDER) {
            gfm.setBorder(BorderFactory.createSimpleBorder(
                    new XYEdges(0, 0, 0, 0), // top, right, bottom, left
                    Border.STYLE_DASHED));
        }
        add(gfm);

        // Size the columns of the GridFieldManager. Make sure to calculate
        // for the padding applied to the columns.
        int columnWidth = (Display.getWidth() / NUM_COLUMNS) - 
                gfm.getColumnPadding();
        for(int i = 0; i < NUM_COLUMNS; i++) {
            gfm.setColumnProperty(i, GridFieldManager.FIXED_SIZE, columnWidth);
        }

        // Populate the columns.
        gfm.add(new ButtonField("1", Field.FIELD_HCENTER));
        gfm.add(new ButtonField("2", Field.FIELD_HCENTER));
        gfm.add(new ButtonField("3", Field.FIELD_HCENTER));
        gfm.add(new ButtonField("4", Field.FIELD_HCENTER));
    }
}
/**
*显示了如何使用GridFieldManager的示例实现
*根据显示器的宽度调整大小。
*/
最终类ScreenWidthGridExample扩展了MainScreen
{
/**
*网格中的行数。
*/
私有静态final int NUM_ROWS=1;
/**
*网格中的列数。
*/
私有静态final int NUM_COLUMNS=4;
/**
*网格的列填充。
*/
私有静态final int COLUMN_PADDING=5;
/**
*切换开关以显示网格周围的边框。
*/
私有静态最终布尔值SHOW_BORDER=true;
/**
*已分配ScreenWidthGridExample的新实例。
*/
ScreenWidthGridExample(){
//设置GridFieldManager
GridFieldManager gfm=
新的GridFieldManager(NUM_行、NUM_列、,
GridFieldManager。固定大小);
gfm.setColumnPaidding(列填充);
如果(显示边界){
gfm.setboorder(BorderFactory.createSimpleOrder(
新的XYEdges(0,0,0,0),//顶部、右侧、底部、左侧
边框。样式(虚线);
}
添加(gfm);
//调整GridFieldManager的列大小。确保计算
//用于应用于列的填充。
int columnWidth=(Display.getWidth()/NUM_COLUMNS)-
gfm.getColumnPading();
对于(int i=0;i
非常感谢,伙计!您在上面看到的代码只是我对GUI的一个初步了解,我只是在玩GUI,看看通过编码可以做些什么。我以前做过拖放GUI设计,但没有机会纯粹通过代码进行设计,所以这应该是一次有趣的体验!