j2me文本自动换行

一、Midlet框架
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import demo.MainCanvas;


public class AutoAjustMidlet extends MIDlet {

public MainCanvas m_MainCanvas;
public AutoAjustMidlet() {
super();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
m_MainCanvas.Stop();
}
protected void pauseApp() {
m_MainCanvas.Stop();
}
protected void startApp() throws MIDletStateChangeException {
m_MainCanvas = new MainCanvas();
Display.getDisplay(this).setCurrent(m_MainCanvas);
}
}




二、辅助类
package demo;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;


public class TextAjust {
//功能: 计算需要换行的位置
//str: 需要显示的文字
//font: 文字的字体
//linewd: 每行的宽度限制
static public int ChangLine(String str, Font font, int linewd )
{
int wd = 0;
char ch;
for (int i = 0; i < str.length(); i++)
{
ch = str.charAt(i);
if (ch == '\n')
return i + 1;

wd += font.charWidth(ch);
if (wd > linewd)
return i;
}
return 0;
}


//功能: 分行显示字符串
//g: 当前显示的缓冲
//strText: 显示的字符串
//linewd: 每行的宽度限制
//x,y: 字符串左上角显示的位置
//yDis: 显示文字时每行间隔的距离
static public void AjustDrawString( Graphics g, String strText,
int linewd, int x, int y, int yDis )
{
String subStr;
int nPos; //需要换行的位置
while (true)
{
nPos = ChangLine(strText, g.getFont(), linewd );
if (nPos == 0)
{
g.drawString( strText, x, y, 0);
break;
}
else
{
if (strText.charAt(nPos - 1) == '\n' )
subStr = strText.substring(0, nPos - 1);
else
subStr = strText.substring(0, nPos);
g.drawString( subStr, x, y, 0);
strText = strText.substring(nPos, strText.length());
y = y + yDis;
}
}
}
}

三、GameCanvas框架:
package demo;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;


public class MainCanvas extends GameCanvas implements Runnable{
private boolean m_bRunning; //控制项目运行
public int m_nWidth = 50; //显示宽度
public Font m_Font; //存储字体
public MainCanvas(){
super(true);
//创建字体,如果创建失败,则采用系统默认字体
try{
m_Font = Font.getFont(Font.FACE_SYSTEM,
Font.STYLE_PLAIN, Font.SIZE_LARGE );
}catch(Exception e){
m_Font = Font.getDefaultFont();
}
Start(); //启动线程
}


public void Start(){
m_bRunning = true;
Thread thread = new Thread(this); //分配新线程
thread.start(); //线程启动
}
public void run() { //新线程自动调用此方法
//获得系统当前时间,并将时间换算成毫秒
long T1 = System.currentTimeMillis();
long T2 = T1;
while(m_bRunning){
T2 = System.currentTimeMillis();
if( T2 - T1 > 100 ){ //间隔100毫秒
T1 = T2;
Input();
Logic();
Paint();
}
}
}


public void Stop(){ //终止游戏
m_bRunning = false;
}


public void Input(){
int keyStates = getKeyStates(); //获取当前按键状态
//如果按下方向键的上键,则调整显示宽度
if( ( keyStates & GameCanvas.UP_PRESSED ) != 0 )
m_nWidth = m_nWidth +10;
//如果按下方向键的下键,则调整显示宽度
if( ( keyStates & GameCanvas.DOWN_PRESSED ) != 0 )
m_nWidth = m_nWidth -10;
}


public void Logic(){
}


public void Paint(){
Graphics g = getGraphics();
//用黑色清屏
g.setColor(0x00000000);
g.fillRect( 0, 0, getWidth(), getHeight() );
g.setFont(m_Font);
g.setColor(0x00FFFFFF);
TextAjust.AjustDrawString(g,
"我要自动换行我要自动换行我要自动换行我要自动换行",
m_nWidth, 20, 20, 15 );

flushGraphics();
}
}

转载于:https://www.cnblogs.com/OneSpeak/articles/1552941.html

内容概要:本文详细介绍了基于滑模控制(SMC)和H∞控制相结合的方法应用于永磁直线同步电机(PMLSM)的鲁棒控制。首先阐述了PMLSM的基本数学模型及其物理意义,包括d-q坐标系下的电压方程和运动方程。随后解释了滑模控制的工作原理,重点在于如何构建滑模面并确保系统沿此面稳定运。接着讨论了H∞控制的目标——即使在不确定条件下也能保持良好的性能表现。文中还提供了具体的Matlab代码实例,展示了如何利用Matlab控制系统工具箱进H∞控制器的设计。最后给出了一段完整的Matlab程序框架,演示了两种控制方法的具体实现方式。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是那些想要深入了解滑模控制和H∞控制理论及其在实际工程中应用的人士。 使用场景及目标:适用于需要提高永磁直线同步电机控制系统抗干扰能力和鲁棒性的场合,如工业自动化生产线、精密加工设备等。通过学习本篇文章提供的理论知识和编程技巧,读者能够掌握这两种先进控制策略的应用方法,从而提升自身解决复杂控制问题的能力。 其他说明:文中所涉及的内容不仅限于理论讲解,还包括了大量的实战经验分享,有助于读者快速上手并在实践中不断改进自己的设计方案。同时鼓励读者积极尝试不同的参数配置,以便找到最适合特定应用场景的最佳解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值