richlabel.java

来自「Typing fingers Typing programme」· Java 代码 · 共 72 行

JAVA
72
字号
import java.awt.*;
import javax.swing.*;

/**	This class extends JPanel to make a multicolor label used in typing components.
*/

class RichLabel extends JPanel{
	private Font font;
	private FontMetrics metrics;
	private Color backcolor;
	private int total,charWidth;
	private char character[];
	private Color color[];
	private int candisplay;
	private int lineWidth;
	private int indent;
	RichLabel(){
		UserData user=MainScreen.getInstance().getCurrentUser();
		font=new Font("MonoSpaced",Font.PLAIN,user.getTypingFontSize());
		metrics=getFontMetrics(font);
		charWidth=metrics.charWidth('a');
		lineWidth=Utilities.getLineWidth();
		indent=Utilities.getIndent();
		setPreferredSize(new Dimension(lineWidth,Utilities.getLabelHeight()));
		candisplay=(lineWidth-2*indent)/charWidth;
		character=new char[candisplay+1];
		color=new Color[candisplay+1];
		character[0]=' ';
		backcolor=user.getBackground();
	}
	public void paint(Graphics g){
		g.setFont(font);
		g.setColor(backcolor);
		g.fillRect(0,0,getWidth(),getHeight());
		int y=(getHeight()-metrics.getHeight())/2+metrics.getAscent();
		for(int i=0;i<total;i++){
			g.setColor(color[i]);
			g.drawString(String.valueOf(character[i]),indent+i*charWidth,y);
		}
	}
	public void addChar(char ch,Color c){
		if(total>=candisplay)
			return;
		character[total]=ch;
		color[total]=c;
		total++;
		repaint();
	}
	public boolean nextAllowed(){
		return (total<candisplay) ? true : false;
	}
	public void removeChar(){
		if(total>0){
			total--;
			repaint();
		}
	}
	public char charAt(int index){
		if(index<0||index>=total)
			return '\0';
		return character[index];
	}
	public void clearText(){
		total=0;
		character[0]=' ';
		repaint();
	}
	public String getText(){
		return new String(character);
	}
}

⌨️ 快捷键说明

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