JavaMe开发绘制文本框TextEdit

【问题描述】

TextEdit是采用GameCanvas绘制的文本编辑器。本文结合实例给出实现的方法。

【原理】

1 运用Graphics、GameCanvas绘制文本框和光标。

2 检测到输入事件时,跳转到 高级界面->TextBox 。通过系统调用输入法完成输入。

3 将TextBox输入的值返回给TextEdit对象。

【设计模式】

这个过程有点类似装饰模式,实际上,实现输入的还是TextBox,只是给TextBox装饰了一下,形成了一个漂亮的外观。

【代码清单】

TextEdit.java

package com.token.view.components; 

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas; 

public class TextEdit extends GameCanvas
{
  private Font ft; 

  public int width;
  public int height; 

  public TextEdit(GameCanvas canvas)
  {
    super(false); 

  } 

  //绘制文本框
  public void drawTextBox(GameCanvas canvas, Graphics graphics, String text, int x, int y, boolean cursorBlinkOn)
  {
    //System.out.println("draw");
    int padding = 4;
    int margin = 2; 

    ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
    graphics.setFont(ft); 

    width = 3*canvas.getWidth()/5+2*padding;
    height = ft.getHeight()+2*padding; 

    graphics.setColor(Color.frame);
    graphics.fillRect(x+1,y+1,width+margin,height+margin); 

    graphics.setColor(Color.frameBg);
    graphics.drawRect(x, y,width, height);
    graphics.setColor(Color.background);
    graphics.fillRect(x+1, y+1,width-1,height-1); 

    graphics.setColor(Color.text);
    graphics.drawString(text, x+padding, y+padding, Graphics.TOP|Graphics.LEFT); 

    drawCursor(graphics, x+ft.stringWidth(text)+padding, y+padding, 1, ft.getHeight(), cursorBlinkOn); 

    canvas.flushGraphics(x,y,width,height);
  } 

  //绘制光标
  public void drawCursor(Graphics graphics, int x, int y, int width, int height, boolean cursorBlinkOn)
  {
    if(cursorBlinkOn)
    {
      ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
      graphics.setFont(ft);
      graphics.setColor(0x0,0x0,0x0);
      graphics.drawLine(x+width,y,x+width,y+height);
    }
  }
}
PopUpTextBox.java

package com.token.view; 

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox; 

import com.token.util.UIController; 

public class PopUpTextBox extends TextBox { 

   private UIController controller;
   protected String canvasText = "";
   private Command okCommand;
   private Command cancelCommand;
   private String object_name = null;
   private String editor = null;
   private Object args_t[];
   private Object[] args; 

   public PopUpTextBox(UIController control, String title, String text, int maxsize, int constraints)
   {
     super(title, text, maxsize, constraints);
     controller = control; 

     args = new Object[6]; 

     okCommand = new Command("确定", Command.OK, 1);
     cancelCommand = new Command("取消", Command.CANCEL, 1); 

     this.addCommand(okCommand);
     this.addCommand(cancelCommand);
     this.setCommandListener(new TextBoxListener());
   } 

   public void init(Object[] args)
   {
     object_name = ((String)args[0]!=null)?(String)args[0]:"";
     editor = ((String)args[1]!=null)?(String)args[1]:"";
     //System.out.println(object_name);
     //System.out.println(editor);
     args_t = args;
     this.setString("");
   } 

   protected void closeTextBox(boolean update) {
      if (update) canvasText = this.getString();
      //System.out.println(canvasText); 

      if(object_name.equals("registScreen"))
      {
        if(editor.equals("regist_name"))
        {
          if(args_t[3]!=""||args_t[3]!=null||args_t[4]!=""||args_t[4]!=null)
          {
            args[0] = object_name;
            args[1] = editor;
            args[2] = this.canvasText;
            args[3] = args_t[3];
            args[4] = args_t[4];
          }
          controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
        }
        else if(editor.equals("regist_passwd"))
        {
          if(args_t[2]!=""||args_t[2]!=null||args_t[4]!=""||args_t[4]!=null)
          {
            args[0] = object_name;
            args[1] = editor;
            args[2] = args_t[2];
            args[3] = this.canvasText;
            args[4] = args_t[4];
          }
          controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
        }
        else if(editor.equals("regist_passwd_re"))
        {
          if(args_t[2]!=""||args_t[2]!=null||args_t[3]!=""||args_t[3]!=null)
          {
            args[0] = object_name;
            args[1] = editor;
            args[2] = args_t[2];
            args[3] = args_t[3];
            args[4] = this.canvasText;
          }
          controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
        }
      } 

      //...
  } 

   private class TextBoxListener implements CommandListener
   {
    public void commandAction(Command command, Displayable disp)
    {
      if(command==okCommand)
      {
        closeTextBox(true);
      }
      else if(command==cancelCommand)
      {
        closeTextBox(false);
      }
    }
  }
}
UserRegist.java

package com.token.view; 

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import com.token.model.*;
import com.token.util.*;
import com.token.view.components.*; 

public class UserRegist extends GameCanvas implements Runnable { 

  private UIController controller;
  private Graphics graphics; 

  private Font ft; 

  private Menu menu;
  private Head head;
  private BackGroud backGroud; 

  private UserDataRecord userRecord; 

  private String title; 

  private TextEdit textEdit_name;
  private TextEdit textEdit_passwd;
  private TextEdit textEdit_passwd_re;
  private int textEdit_name_x;
  private int textEdit_name_y;
  private int textEdit_passwd_x;
  private int textEdit_passwd_y;
  private int textEdit_passwd_re_x;
  private int textEdit_passwd_re_y;
  private int currentlySelectedIndex = 0; 

  private String username;
  private String passwd;
  private String passwd_re; 

  long caretBlinkDelay = 500L;
  long lastCaretBlink = 0;
  private String object_name;
  private String editor;
  private boolean cursorBlinkOn1;
  private boolean cursorBlinkOn2;
  private boolean cursorBlinkOn3; 

  private int width;
  private int height; 

  public UserRegist(UIController control)
  {
    super(false);
    this.controller=control;
    this.title = "用户注册";
    setFullScreenMode(true);
    graphics = getGraphics(); 

    width = getWidth();
    height = getHeight(); 

    menu = new Menu(this);
    head = new Head(this);
    backGroud = new BackGroud(this); 

    userRecord = new UserDataRecord(); 

    textEdit_name = new TextEdit(this);
    textEdit_passwd = new TextEdit(this);
    textEdit_passwd_re = new TextEdit(this);
  } 

  public void show(Object[] args) {
    // TODO Auto-generated method stub
    setFullScreenMode(true); 

    object_name = ((String)args[0]!=null)?(String)args[0]:"";
    editor = ((String)args[1]!=null)?(String)args[1]:"";
    username = ((String)args[2]!=null)?(String)args[2]:"";
    passwd = ((String)args[3]!=null)?(String)args[3]:"";
    passwd_re = ((String)args[4]!=null)?(String)args[4]:""; 

    if(editor.equals("regist_name"))
    {
      cursorBlinkOn1 = true;
      cursorBlinkOn2 = false;
      cursorBlinkOn3 = false;
      currentlySelectedIndex =0;
    }
    else if(editor.equals("regist_passwd"))
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn2 = true;
      cursorBlinkOn3 = false;
      currentlySelectedIndex =1;
    }
    else if(editor.equals("regist_passwd_re"))
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn2 = false;
      cursorBlinkOn3 = true;
      currentlySelectedIndex =2;
    } 

    //System.out.println(object_name);
    //System.out.println(editor);
    draw();
    redraw();
  } 

  public void draw()
  {
    //clearScreen();
    backGroud.drawBackGroud(this, graphics);
    head.drawHead(this,graphics,this.title);
    menu.drawMenu(this,graphics,"下一步","退出");
    drawBody();
  } 

  private void redraw()
  {
    switch(currentlySelectedIndex)
    {
      case 0:
      {
        cursorBlinkOn2 = false;
        cursorBlinkOn3 = false;
        editor = "regist_name";
        break;
      }
      case 1:
      {
        cursorBlinkOn1 = false;
        cursorBlinkOn3 = false;
        editor = "regist_passwd";
        break;
      }
      case 2:
      {
        cursorBlinkOn1 = false;
        cursorBlinkOn2 = false;
        editor = "regist_passwd_re";
        break;
      }
      default:;
    } 

    textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1);
    textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2);
    textEdit_passwd.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3);
    textEdit_name.flushGraphics();
  } 

  public void drawBody()
  {
    int margin =5;
    ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE); 

    String info = "用户名:\n";
    String info_wrap1[] = StringDealMethod.format(info, width-10, ft); 

    graphics.setFont(ft);
    graphics.setColor(Color.text);
    for(int i=0; i<info_wrap1.length; i++)
    {
      graphics.drawString(info_wrap1[i],5, (i) * ft.getHeight()+40, Graphics.TOP|Graphics.LEFT);
    } 

    textEdit_name_x = 5;
    textEdit_name_y = info_wrap1.length * ft.getHeight()+40;
    textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1); 

    info = "用户密码:\n";
    String info_wrap2[] = StringDealMethod.format(info, width-10, ft); 

    graphics.setFont(ft);
    graphics.setColor(Color.text);
    for(int i=0; i<info_wrap2.length; i++)
    {
      graphics.drawString(info_wrap2[i],5, (i+info_wrap1.length) * ft.getHeight()+textEdit_name.height+margin+40, Graphics.TOP|Graphics.LEFT);
    } 

    textEdit_passwd_x = 5;
    textEdit_passwd_y = (info_wrap1.length+info_wrap2.length) * ft.getHeight()+textEdit_name.height+margin+40;
    textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2); 

    info = "密码确认:\n";
    String info_wrap3[] = StringDealMethod.format(info, width-10, ft); 

    graphics.setFont(ft);
    graphics.setColor(Color.text);
    for(int i=0; i<info_wrap3.length; i++)
    {
      graphics.drawString(info_wrap3[i],5, (i+info_wrap1.length+info_wrap2.length) * ft.getHeight()+textEdit_name.height+textEdit_passwd.height+2*margin+40, Graphics.TOP|Graphics.LEFT);
    } 

    textEdit_passwd_re_x = 5;
    textEdit_passwd_re_y = (info_wrap1.length+info_wrap2.length+info_wrap3.length) * ft.getHeight()+textEdit_name.height+textEdit_passwd.height+2*margin+40;
    textEdit_passwd_re.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3); 

  } 

  public void clearScreen()
  {
    graphics.setColor(0xff,0xff,0xff);
    graphics.fillRect(0, 0, width, height);
  } 

  public void checkTimeStamp()
  {
    long currentTime = System.currentTimeMillis();
    //System.out.println("1");
    if(lastCaretBlink + caretBlinkDelay < currentTime)
    {
      //System.out.println("2");
      if(editor.equals("regist_name"))
      {
        cursorBlinkOn1 =! cursorBlinkOn1;
        cursorBlinkOn2 = false;
        cursorBlinkOn3 = false;
      }
      else if(editor.equals("regist_passwd"))
      {
        cursorBlinkOn1 = false;
        cursorBlinkOn2 =! cursorBlinkOn2;
        cursorBlinkOn3 = false;
      }
      else if(editor.equals("regist_passwd_re"))
      {
        cursorBlinkOn1 = false;
        cursorBlinkOn2 = false;
        cursorBlinkOn3 =! cursorBlinkOn3;
      }
      lastCaretBlink = currentTime;
    }
  } 

  public void run()
  {
    //System.out.println("run");
    while(true)
    {
      checkTimeStamp(); 

      redraw();
      try
      {
        synchronized(this)
        {
          //System.out.println("3");
          wait(50L);
        }
      }
      catch(Exception e)
      {
        e.printStackTrace();
      } 

    }
  } 

  protected void keyPressed(int keyCode)
  {
    switch(keyCode)
    {
      case KeyID.SOFT_RIGHT:
      {
        controller.handleEvent(UIController.EventID.EVENT_EXIT,null);
        break;
      }
      case KeyID.SOFT_LEFT:
      {
        if(username!="" && passwd!=""&&passwd_re!="")
        {
          if(passwd.equals(passwd_re))
          { 

            userRecord.db_deleteAllRecord();
            if(userRecord.db_getRecord(1)==null)
            {
              UserDataItem userItem = new UserDataItem(1,(username+","+passwd).getBytes());
              userRecord.db_addRecord(userItem);
              userItem = null;
              System.gc();
            } 

            String update = "start";
            Object [] args = {"activeScreen", null, update};
            controller.handleEvent(UIController.EventID.EVENT_NEXT_ACTIVE_TOKEN_SCREEN,args);
          }
        }
        break;
      }
      case KeyID.KEY_EDIT:
      case KEY_NUM0:
      case KEY_NUM1:
      case KEY_NUM2:
      case KEY_NUM3:
      case KEY_NUM4:
      case KEY_NUM5:
      case KEY_NUM6:
      case KEY_NUM7:
      case KEY_NUM8:
      case KEY_NUM9:
      {
        //System.out.println(editor);
        Object[] args = {object_name,editor,username,passwd,passwd_re};
        controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT,args);
        break;
      }
      default:;
    } 

    keyCode = getGameAction(keyCode);
    switch(keyCode)
    {
      case UP:
      case LEFT:
      {
        currentlySelectedIndex--;
        if(currentlySelectedIndex<0)
        {
          currentlySelectedIndex=0;
        }
        else
        {
          redraw();
        }
        break;
      }
      case DOWN:
      case RIGHT:
      {
        currentlySelectedIndex++;
        if(currentlySelectedIndex>2)
        {
          currentlySelectedIndex=2;
        }
        else
        {
          redraw();
        } 

        break;
      }
    }
  }
}

【分析】

1 文本框的绘制(TextEdit.java)

需要传递GameCanvas、Graphics对象,实现绘图,策略是谁使用,谁传递该参数。此外需要床底文本框左上角坐标(x,y)以及控制光标闪烁的变量cursorBlinkOn。

public void drawTextBox(GameCanvas canvas, Graphics graphics, String text, int x, int y, boolean cursorBlinkOn)
{
  //System.out.println("draw");
  int padding = 4;
  int margin = 2; 

  ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
  graphics.setFont(ft); 

  width = 3*canvas.getWidth()/5+2*padding;
  height = ft.getHeight()+2*padding; 

  graphics.setColor(Color.frame);
  graphics.fillRect(x+1,y+1,width+margin,height+margin); 

  graphics.setColor(Color.frameBg);
  graphics.drawRect(x, y,width, height);
  graphics.setColor(Color.background);
  graphics.fillRect(x+1, y+1,width-1,height-1); 

  graphics.setColor(Color.text);
  graphics.drawString(text, x+padding, y+padding, Graphics.TOP|Graphics.LEFT); 

  drawCursor(graphics, x+ft.stringWidth(text)+padding, y+padding, 1, ft.getHeight(), cursorBlinkOn); 

  canvas.flushGraphics(x,y,width,height);
}

2 绘制光标(TextEdit.java)

public void drawCursor(Graphics graphics, int x, int y, int width, int height, boolean cursorBlinkOn)
{
  if(cursorBlinkOn)
  {
    ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);
    graphics.setFont(ft);
    graphics.setColor(0x0,0x0,0x0);
    graphics.drawLine(x+width,y,x+width,y+height);
  }
} 

3 实现光标闪烁

光标闪烁的实现需要用到线程,在UIController.java类中,需要绘制文本框的视图类,需要实现线程接口。

UIController.java

case EventID.EVENT_NEXT_USER_REGIST_SCREEN:
case EventID.EVENT_USER_REGIST_EDIT_BACK:
{
      reg.show(args);
      Thread thread = new Thread(reg);
      thread.start();
      midlet.setCurrent(reg);
      break;
}
UserRegist.java

public void checkTimeStamp()
{
  long currentTime = System.currentTimeMillis();
  //System.out.println("1");
  if(lastCaretBlink + caretBlinkDelay < currentTime)
  {
    //System.out.println("2");
    if(editor.equals("regist_name"))
    {
      cursorBlinkOn1 =! cursorBlinkOn1;
      cursorBlinkOn2 = false;
      cursorBlinkOn3 = false;
    }
    else if(editor.equals("regist_passwd"))
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn2 =! cursorBlinkOn2;
      cursorBlinkOn3 = false;
    }
    else if(editor.equals("regist_passwd_re"))
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn2 = false;
      cursorBlinkOn3 =! cursorBlinkOn3;
    }
    lastCaretBlink = currentTime;
  }
} 

public void run()
{
  //System.out.println("run");
  while(true)
  {
    checkTimeStamp(); 

    redraw();
    try
    {
      synchronized(this)
      {
        //System.out.println("3");
        wait(50L);
      }
    }
    catch(Exception e)
    {
      e.printStackTrace();
    } 

  }
}

4 调用高级界面TextBox子类PopUpTextBox

调用时,将调用对象名、编辑对象名、以及编辑框参数传递给PopUpTextBox对象(一定要有,目的是保存编辑框的值,否则多次调用返回时,不同编辑框的值被刷新为空了)

UserRegist.java(KeyPressed)

case KeyID.KEY_EDIT:
case KEY_NUM0:
case KEY_NUM1:
case KEY_NUM2:
case KEY_NUM3:
case KEY_NUM4:
case KEY_NUM5:
case KEY_NUM6:
case KEY_NUM7:
case KEY_NUM8:
case KEY_NUM9:
{
  //System.out.println(editor);
  Object[] args = {object_name,editor,username,passwd,passwd_re};
  controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT,args);
  break;
}
UIController.java

case EventID.EVENT_USER_REGIST_EDIT:
{
   textBox.init(args);
     midlet.setCurrent(textBox);
   break;
}

5 PopUpTextBox参数的接收

public void init(Object[] args)
{
   object_name = ((String)args[0]!=null)?(String)args[0]:"";
   editor = ((String)args[1]!=null)?(String)args[1]:"";
   //System.out.println(object_name);
   //System.out.println(editor);
   args_t = args;
   this.setString("");
}

6 PopUpTextBox返回输入法输入的值

if (update) canvasText = this.getString();
7 PopUpTextBox输入值处理

依据调用的对象,以及编辑对象,对输入的值进行处理,传递给父对象编辑框

if(object_name.equals("registScreen"))
{
    if(editor.equals("regist_name"))
    {
        if(args_t[3]!=""||args_t[3]!=null||args_t[4]!=""||args_t[4]!=null)
        {
          args[0] = object_name;
          args[1] = editor;
          args[2] = this.canvasText;
          args[3] = args_t[3];
          args[4] = args_t[4];
        }
        controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
  }
  else if(editor.equals("regist_passwd"))
  {
        if(args_t[2]!=""||args_t[2]!=null||args_t[4]!=""||args_t[4]!=null)
        {
          args[0] = object_name;
          args[1] = editor;
          args[2] = args_t[2];
          args[3] = this.canvasText;
          args[4] = args_t[4];
        }
        controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
  }
  else if(editor.equals("regist_passwd_re"))
  {
        if(args_t[2]!=""||args_t[2]!=null||args_t[3]!=""||args_t[3]!=null)
        {
          args[0] = object_name;
          args[1] = editor;
          args[2] = args_t[2];
          args[3] = args_t[3];
          args[4] = this.canvasText;
        }
        controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);
  }
}

8 输入值的显示

(1) 新建对象

private TextEdit textEdit_name;
textEdit_name = new TextEdit(this);

(2) 接受输入的参数

object_name = ((String)args[0]!=null)?(String)args[0]:"";
editor = ((String)args[1]!=null)?(String)args[1]:"";
username = ((String)args[2]!=null)?(String)args[2]:"";
passwd = ((String)args[3]!=null)?(String)args[3]:"";
passwd_re = ((String)args[4]!=null)?(String)args[4]:"";

(3) 光标控制,定位到编辑对象,控制编辑对象的光标闪烁(run方法)

private void redraw()
{
  switch(currentlySelectedIndex)
  {
    case 0:
    {
      cursorBlinkOn2 = false;
      cursorBlinkOn3 = false;
      editor = "regist_name";
      break;
    }
    case 1:
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn3 = false;
      editor = "regist_passwd";
      break;
    }
    case 2:
    {
      cursorBlinkOn1 = false;
      cursorBlinkOn2 = false;
      editor = "regist_passwd_re";
      break;
    }
    default:;
  }
//... 

} 

(4) 编辑框的绘制

private void redraw()
{
  ...
  textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1);
  textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2);
  textEdit_passwd.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3);
  textEdit_name.flushGraphics();
}

实现的效果如图1所示:

(0)

相关推荐

  • Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例

    一:JTextField的(文本框)使用: JTextField 是一个轻量级组件,它允许编辑单行文本. 1.JTextField的常用构造方法: JTextField() 构造一个新的 TextField. JTextField(int columns) 构造一个具有指定列数的新的空 TextField. JTextField(String text) 构造一个用指定文本初始化的新TextField. JTextField(String text, int columns) 构造一个用指定文本

  • 浅谈java中文本框和文本区

    在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是ActionListener. 文本框处理程序的基本内容有以下几个方面: 1.声明一个文本框名. 2.建立一个文本框对象. 3.将文本框对象加入到某个容器. 4.对需要控制的文本框对象注册监视器,监听文本框的输入结束(即输入回车键)事件. 5.一个处理文本框事件的方法,完成对截获事件进行判断和处理. JText

  • Java编程获取文本框的内容实例解析

    在JAVA中如何获取文本框中输入的值,并保存在一个文件之中.具体代码如下: import java.io.*; import javax.swing.*; import java.awt.FlowLayout; import java.awt.event.*; public class WriterTo extends JFrame implements ActionListener{ JButton b;JTextField t; public WriterTo(){ super("文本框内容

  • 解析Java图形化编程中的文本框和文本区

    在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是ActionListener. 文本框处理程序的基本内容有以下几个方面: 声明一个文本框名. 建立一个文本框对象. 将文本框对象加入到某个容器. 对需要控制的文本框对象注册监视器,监听文本框的输入结束(即输入回车键)事件. 一个处理文本框事件的方法,完成对截获事件进行判断和处理. JTextField类的主要构

  • java实现文本框和文本区的输入输出

    在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对于采用文本框作为输入的情况,最后输入的回车符可以激发输入完成事件,通常不用另设按钮.事件处理程序可以利用单词分析器分析出一个个数,再利用字符串转换数值方法,获得输入的数值.对于输出,程序先将数值转换成字符串,然后通过setText()方法将数据输出到文本框或文本区. [例 11-9]小应用程序设置一

  • JavaMe开发绘制文本框TextEdit

    [问题描述] TextEdit是采用GameCanvas绘制的文本编辑器.本文结合实例给出实现的方法. [原理] 1 运用Graphics.GameCanvas绘制文本框和光标. 2 检测到输入事件时,跳转到 高级界面->TextBox .通过系统调用输入法完成输入. 3 将TextBox输入的值返回给TextEdit对象. [设计模式] 这个过程有点类似装饰模式,实际上,实现输入的还是TextBox,只是给TextBox装饰了一下,形成了一个漂亮的外观. [代码清单] TextEdit.jav

  • JavaMe开发绘制可自动换行文本

    [问题描述] JavaMe Graphics类中的drawString不支持文本换行,这样绘制比较长的字符串时,文本被绘制在同一行,超过屏幕部分的字符串被截断了.如何使绘制的文本能自动换行呢? [分析] drawString无法实现自动换行,但可以实现文本绘制的定位.因此可考虑,将文本拆分为多个子串,再对子串进行绘制.拆分的策略如下: 1 遇到换行符,进行拆分: 2 当字符串长度大于设定的长度(一般为屏幕的宽度),进行拆分. [步骤] 1 定义一个String和String []对象: priv

  • Android开发高级组件之自动完成文本框(AutoCompleteTextView)用法示例【附源码下载】

    本文实例讲述了Android开发高级组件之自动完成文本框(AutoCompleteTextView)用法.分享给大家供大家参考,具体如下: 通常来说自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上他也是一个编辑框,但他比普通的编辑框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择了某个菜单项过后,AutoCompleteTextView就会按用户选择自动填写该文本框. 自动完成文本框(AutoComple

  • android开发教程之文本框加滚动条scrollview

    我们都知道EditText与TextView是Android的文本输入框和文本显示框,但是基于手机屏幕的大小因素,如果在需要输入较多文字或者显示较多内容的时候,手机屏幕是远远不够的,因此让文本框具有滚动条的功能是手机上必备的,下面介绍下如何加上滚动条.要加上滚动条,其实很简单,只需要在文本输入框或者文本显示框上面加上滚动条控件即可,该控件名字为ScrollView,以下我们对比下(以TextView举例). 复制代码 代码如下: //A.未加滚动效果 <TextView android:layo

  • PHP程序开发范例学习之表单 获取文本框的值

    <form name="form" method="post" action="login.php"></form> 文本框的用法: <input type="text" name="username" /> 其中input类型包括text.password等类型,HTML5新增了很多的input类型,如果想学习这类的知识可以很好的了解一下,因为分的越细,用的越方便. 看

  • Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)

    在Android开发过程中,如果Android系统自带的属性不能满足我们日常开发的需求,那么就需要我们给系统控件添加额外的属性了.假如有个需求是实现带下划线的文本显示(下划线),如果不使用自定义属性的话实现起来也不太难(起码我认为的实现方式是有许多种的),今天就讲解一下如何使用自定义属性来实现上述带下划线的文本框吧.还好Android中自定义属性不是很复杂,也可以归纳为三步走吧. 老规矩,还是先贴出工程目录吧: 一.添加属性文件 在values文件夹中新建attrs.xml文件,在文件中新建属性

  • jQuery控制文本框只能输入数字和字母及使用方法

    在公司开发WinForm项目时,发现公司自主研发的textbox控件非常强大,可以实现"只能输入数字"."只能输入字母"和"只能输入数字和字母"的三种输入限制,这样就可以精确控制用户输入的内容范围,让"用户永远没有办法输入限定的内容范围之外的其他内容",也就是"用户即使想犯错误也没有机会",这种限制控件输入的方式给了我很大的启发,如果在web项目中也能做到这样的精确控制,那么就可以避免因为一些非法输入而造成

  • ASP.NET输入文本框自动提示功能

    在ASP.NET Web开发中会经常用到自动提示功能,比如百度搜索.我们只要输入相应的关键字,就可以自动得到相似搜索关键字的提示,方便我们快速的输入关键字进行查询. 那么在ASP.NET中,如果我们需要做个类似的效果,该如何做到呢? 很简单,我们只要借助于一个JQuery强大的插件JQuery AutoComplete来完成这个效果就可以了.这个插件的官方地址为:JQuery AutoComplete,里面也有示例代码. 下面我们将以一个身份证号自动查询为例,来看看JQuery AutoComp

  • Asp.net中使用文本框的值动态生成控件的方法

    看到一个网友,有论坛上问及,动态的生成checkbox控件,在文本框中输入一个"花"字,点一下"生成"按钮,就会在下面生成一个checkbox,它的text属性是"花".再输入一个"鸟",点一下按钮,就会生成第二个checkbox控件,text属性是"鸟"... Insus.NET的解决方法很简单,就是每次在文本框输入的值都存起来,然后把这些数据绑定至一个CheckBoxList控件上就行了. 详细,先创建

  • iOS使用runtime修改文本框(TextField)的占位文字颜色

    前言 在大家平时的开发中,有时候会遇到背景深色的界面上需要添加TextField,TextField默认的占位颜色也是深灰色,比较难看清,这时候就需要修改展位文字的颜色,可是系统没有提供相应的方法,那么就需要我们自己来自定义了 修改后的效果 话不多说,下面上代码: // .h文件 #import <UIKit/UIKit.h> @interface UITextField (Placeholder) @property UIColor *placeholderColor; @end // .m

随机推荐