⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringcomponent.java

📁 手机模拟器源代码,可以在网页上调用applet应用来摸拟手机,在线体验手机游戏和运用.可以在网页上自定义手机外观.
💻 JAVA
字号:
/* * MicroEmulator  * Copyright (C) 2001 Bartek Teodorczyk <barteo@it.pl> *  * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. *  * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. *  * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package javax.microedition.lcdui;import com.barteo.emulator.device.DeviceFactory;class StringComponent {	String text;	int breaks[] = new int[4];	boolean invertPaint = false;	int numOfBreaks;	int width;		StringComponent() 	{		this(null);	}		StringComponent(String text) 	{		this.width = -1;		setText(text);	}		String getText() 	{		return text;	}		void setText(String text) 	{		this.text = text;		this.numOfBreaks = -1;	}		int getCharPositionX(int num) 	{		if (numOfBreaks == -1) {			updateBreaks();		}				int i, prevIndex = 0;		Font f = Font.getDefaultFont();		for (i = 0; i < numOfBreaks; i++) {			if (num < breaks[i]) {				break;			}			prevIndex = breaks[i];		}		return f.substringWidth(text, prevIndex, num - prevIndex);	}		int getCharPositionY(int num) 	{		if (numOfBreaks == -1) {			updateBreaks();		}				int y = 0;		Font f = Font.getDefaultFont();		for (int i = 0; i < numOfBreaks; i++) {			if (num < breaks[i]) {				break;			}			y += f.getHeight();		}		return y;	}		int getCharHeight() 	{		return Font.getDefaultFont().getHeight();	}		int getHeight() 	{		if (numOfBreaks == -1) {			updateBreaks();		}				int height;		Font f = Font.getDefaultFont();		if (text == null) {			return 0;		}		if (numOfBreaks == 0) {			return f.getHeight();		}		height = numOfBreaks * f.getHeight();		if (breaks[numOfBreaks - 1] == text.length() - 1			&& text.charAt(text.length() - 1) == '\n') {		} else {			height += f.getHeight();		}		return height;	}		private void insertBreak(int pos) 	{		int i;		for (i = 0; i < numOfBreaks; i++) {			if (pos < breaks[i]) {				break;			}		}		if (numOfBreaks + 1 == breaks.length) {			int newbreaks[] = new int[breaks.length + 4];			System.arraycopy(breaks, 0, newbreaks, 0, numOfBreaks);			breaks = newbreaks;		}		System.arraycopy(breaks, i, breaks, i + 1, numOfBreaks - i);		breaks[i] = pos;		numOfBreaks++;	}		void invertPaint(boolean state) 	{		invertPaint = state;	}		int length() 	{		return text.length();	}		int paint(Graphics g) 	{		if (text == null) {			return 0;		}		if (numOfBreaks == -1) {			updateBreaks();		}				int i, prevIndex, y;		Font f = Font.getDefaultFont();		for (i = prevIndex = y = 0; i < numOfBreaks; i++) {			if (invertPaint) {				g.setGrayScale(0);			} else {				g.setGrayScale(255);			}			g.fillRect(0, y, width, f.getHeight());			if (invertPaint) {				g.setGrayScale(255);			} else {				g.setGrayScale(0);			}			g.drawSubstring(text, prevIndex, breaks[i] - prevIndex, 0, y, 0);			prevIndex = breaks[i];			y += f.getHeight();		}		if (prevIndex != text.length()) {			if (invertPaint) {				g.setGrayScale(0);			} else {				g.setGrayScale(255);			}			g.fillRect(0, y, width, f.getHeight());			if (invertPaint) {				g.setGrayScale(255);			} else {				g.setGrayScale(0);			}			g.drawSubstring(				text,				prevIndex,				text.length() - prevIndex,				0,				y,				0);			y += f.getHeight();		}		return y;	}		void setWidth(int width) 	{		this.width = width;		updateBreaks();	}		void updateBreaks() 	{		if (text == null) {			return;		}				if (width == -1) {			width = DeviceFactory.getDevice().getDeviceDisplay().getWidth();		}		int prevIndex = 0;		int canBreak = 0;		numOfBreaks = 0;		Font f = Font.getDefaultFont();		for (int i = 0; i < text.length(); i++) {			if (text.charAt(i) == ' ') {				canBreak = i + 1;			}			if (text.charAt(i) == '\n') {				insertBreak(i);				canBreak = 0;				prevIndex = i + 1;				continue;			}			if (f.substringWidth(text, prevIndex, i - prevIndex + 1) > width) {				if (canBreak != 0) {					insertBreak(canBreak);					i = canBreak;					prevIndex = i;				} else {					insertBreak(i);					prevIndex = i + 1;				}				canBreak = 0;			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -