Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中央两个按钮不好看黑莓_Java_Blackberry - Fatal编程技术网

Java 中央两个按钮不好看黑莓

Java 中央两个按钮不好看黑莓,java,blackberry,Java,Blackberry,我正在开发一个应用程序,我想在其中创建两个按钮。这些按钮应该是带有位图填充背景的对齐自定义按钮。每个按钮还应包含位于该按钮中心的文本 问题是这两个按钮设置不正确。第二个按钮位于第一个按钮之后,其位图高度也比第一个按钮降低 对于这两个自定义按钮,我有相同的CustomButton类 下面是代码: CustomButtonField aboutM1 = new CustomButtonField(0,"About G1",registerbg,registerbg,Field.FOCUSABLE,

我正在开发一个应用程序,我想在其中创建两个按钮。这些按钮应该是带有位图填充背景的对齐自定义按钮。每个按钮还应包含位于该按钮中心的文本

问题是这两个按钮设置不正确。第二个按钮位于第一个按钮之后,其位图高度也比第一个按钮降低

对于这两个自定义按钮,我有相同的CustomButton类

下面是代码:

 CustomButtonField aboutM1 = new CustomButtonField(0,"About G1",registerbg,registerbg,Field.FOCUSABLE,0x324F85);
                    add(new RichTextField(Field.NON_FOCUSABLE));

                  //  CustomButtonField2 ForgotPass = new CustomButtonField2("Forgot Password?",0x324F85);
                    CustomButtonField ForgotPass = new CustomButtonField(0,"Forgot Password?",registerbg,registerbg,Field.FOCUSABLE,0x324F85);

                    add(new RichTextField(Field.NON_FOCUSABLE));

                    VerticalFieldManager bottomVFM = new VerticalFieldManager(USE_ALL_WIDTH);
                    HorizontalFieldManager bottomHFM = new HorizontalFieldManager(FIELD_HCENTER);

                    bottomHFM.add(aboutM1);
                    bottomHFM.add(ForgotPass);
                    bottomVFM.add(bottomHFM);
                    add(bottomVFM);
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.*;

public class CustomButtonField extends Field
{
    Bitmap Unfocus_img, Focus_img, current_pic;
    int width;
    String text;
    Font font;   
    int custColor;
    CustomButtonField(int width, String text, Bitmap onFocus, Bitmap onUnfocus, long style,int custColor)
    {
        super(style);
        Unfocus_img = onUnfocus;
        Focus_img = onFocus;
        current_pic = onFocus;
        this.text = text;
        this.width = width;
        this.custColor = custColor;
    }
    protected void layout(int width, int height) 
    {
        setExtent(current_pic.getWidth(), current_pic.getHeight());        
    }
    protected void paint(Graphics graphics) 
    {
        try
        {
                FontFamily fntFamily = FontFamily.forName("BBAlpha Sans");
                font = fntFamily.getFont(Font.BOLD,20);              
        }
        catch(Exception e)
        {
            font = Font.getDefault();

        }
        graphics.setFont(font);


        graphics.setColor(custColor); 

        int xText = (getWidth() - font.getAdvance(text)) / 2;
        int yText = (getHeight() - font.getHeight()) / 2;

        graphics.drawBitmap(0, 0, current_pic.getWidth(), current_pic.getHeight(), current_pic , 0 , 0);
        graphics.drawText(text, xText, yText);

       /* graphics.drawBitmap(0, 0, current_pic.getWidth(), current_pic.getHeight(), current_pic , 0 , 0);
        graphics.drawText(text, width , 7);*/
        graphics.setDrawingStyle(Graphics.HCENTER | Graphics.VCENTER, true);
    }
    protected void onFocus(int direction) 
    {
        super.onFocus(direction);
        current_pic = Unfocus_img;
        this.invalidate();
    }
  protected void drawFocus(Graphics graphics, boolean on) 
  {

    }
    protected void onUnfocus() 
    {
        super.onUnfocus();
        current_pic = Focus_img;
        invalidate();
    }
    public boolean isFocusable() {
        return true;
    }
    protected boolean navigationClick(int status, int time) {
        fieldChangeNotify(0);
        return true;
    }
} 
自定义按钮:

 CustomButtonField aboutM1 = new CustomButtonField(0,"About G1",registerbg,registerbg,Field.FOCUSABLE,0x324F85);
                    add(new RichTextField(Field.NON_FOCUSABLE));

                  //  CustomButtonField2 ForgotPass = new CustomButtonField2("Forgot Password?",0x324F85);
                    CustomButtonField ForgotPass = new CustomButtonField(0,"Forgot Password?",registerbg,registerbg,Field.FOCUSABLE,0x324F85);

                    add(new RichTextField(Field.NON_FOCUSABLE));

                    VerticalFieldManager bottomVFM = new VerticalFieldManager(USE_ALL_WIDTH);
                    HorizontalFieldManager bottomHFM = new HorizontalFieldManager(FIELD_HCENTER);

                    bottomHFM.add(aboutM1);
                    bottomHFM.add(ForgotPass);
                    bottomVFM.add(bottomHFM);
                    add(bottomVFM);
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.*;

public class CustomButtonField extends Field
{
    Bitmap Unfocus_img, Focus_img, current_pic;
    int width;
    String text;
    Font font;   
    int custColor;
    CustomButtonField(int width, String text, Bitmap onFocus, Bitmap onUnfocus, long style,int custColor)
    {
        super(style);
        Unfocus_img = onUnfocus;
        Focus_img = onFocus;
        current_pic = onFocus;
        this.text = text;
        this.width = width;
        this.custColor = custColor;
    }
    protected void layout(int width, int height) 
    {
        setExtent(current_pic.getWidth(), current_pic.getHeight());        
    }
    protected void paint(Graphics graphics) 
    {
        try
        {
                FontFamily fntFamily = FontFamily.forName("BBAlpha Sans");
                font = fntFamily.getFont(Font.BOLD,20);              
        }
        catch(Exception e)
        {
            font = Font.getDefault();

        }
        graphics.setFont(font);


        graphics.setColor(custColor); 

        int xText = (getWidth() - font.getAdvance(text)) / 2;
        int yText = (getHeight() - font.getHeight()) / 2;

        graphics.drawBitmap(0, 0, current_pic.getWidth(), current_pic.getHeight(), current_pic , 0 , 0);
        graphics.drawText(text, xText, yText);

       /* graphics.drawBitmap(0, 0, current_pic.getWidth(), current_pic.getHeight(), current_pic , 0 , 0);
        graphics.drawText(text, width , 7);*/
        graphics.setDrawingStyle(Graphics.HCENTER | Graphics.VCENTER, true);
    }
    protected void onFocus(int direction) 
    {
        super.onFocus(direction);
        current_pic = Unfocus_img;
        this.invalidate();
    }
  protected void drawFocus(Graphics graphics, boolean on) 
  {

    }
    protected void onUnfocus() 
    {
        super.onUnfocus();
        current_pic = Focus_img;
        invalidate();
    }
    public boolean isFocusable() {
        return true;
    }
    protected boolean navigationClick(int status, int time) {
        fieldChangeNotify(0);
        return true;
    }
} 

您使用的代码是正确的,唯一的缺点是您根据位图宽度将文本居中&文本长度大于位图宽度。 你可能需要改变你的方法。 在下面的URL中查看Blackberry UI示例,并检查EmpressedButtonField演示

https://github.com/blackberry/Samples-for-Java

一旦我们不能确定按钮标签的长度,创建自定义按钮是一种很好的方法。

您正在使用位图作为按钮字段背景。按钮字段的宽度和高度取决于位图,而不是文本的长度。当文本长度超过提供的背景位图的默认宽度时,您需要决定要执行的操作。所以,请具体说明你对长文本的决定。。。正如您在回复代码时所说,(在聊天室中),您需要拉伸背景图像。如果你需要一个完整的实现,你可以敲我这里。关于自定义
ButtonField
的实现,SO中有几个帖子。您是否尝试了
Background
object来设置自定义ButtonField的背景。您可以使用
BackgroundFactory
创建多种类型的背景(图像背景)。我认为这是一个很好的示例,但问题是如何拉伸位图…您需要做的是,您需要使用两个位图。对于焦点和非焦点。此位图将分为三个部分:开始部分、中间部分和结束部分。根据文本长度,中间部分将使用graphics.drawBitmap根据文本长度绘制多次(使用循环),因此它将完成调整位图大小的问题。