?? charindicatormain.java
字號(hào):
import java.awt.*;
import javax.swing.*;
/** This class is a contains 5 TwoLayeredComponent classes to make a typing component.
*/
class CharIndicatorMain extends JPanel implements TypingComponent{
private TwoLayeredComponent twoLayered[];
private int index;
private int currentRow;
private Color backcolor;
private final int rows=5,eof;
private boolean flag,show=true;
private String lesson,user="";
private TypingFrame frame;
private boolean startFlag=true;
private SpeedGraphFrame speedFrame;
private CalculateSpeed calculate;
private UserData currentUser;
private DialogLabel label;
private KeyboardFrame keyboard;
CharIndicatorMain(String lesson,SpeedGraphFrame speedFrame,KeyboardFrame keyboard){
this.lesson=lesson;
eof=lesson.length();
this.keyboard=keyboard;
this.speedFrame=speedFrame;
setLayout(new GridLayout(rows+1,1,0,10));
setPreferredSize(new Dimension(Utilities.getLineWidth(),Utilities.getTypingComponentHeight()));
twoLayered=new TwoLayeredComponent[rows];
for(int i=0;i<rows;i++){
twoLayered[i]=new TwoLayeredComponent();
add(twoLayered[i]);
}
JPanel panel=new JPanel();
panel.add(label=new DialogLabel("Speed=0 WPM",new Font("Times new Roman",Font.BOLD,20)));
add(panel);
frame=new TypingFrame(this);
calculate=new CalculateSpeed(lesson,label);
speedFrame.setSpeedSource(calculate);
currentUser=MainScreen.getInstance().getCurrentUser();
backcolor=currentUser.getBackground();
setBackground(backcolor);
}
public TypingFrame getFrame(){
return frame;
}
public void displayText(){
clearAllText();
boolean flag;
char ch;
keyboard.highlightKey(lesson.charAt(index));
for(int i=0;i<rows;i++){
while(index<eof){
ch=lesson.charAt(index);
flag=twoLayered[i].addText(ch);
if(flag==false){
break;
}
index++;
}
}
twoLayered[currentRow].highlightAt(0);
}
public void addChar(char typed){
if(typed==8){
if(twoLayered[currentRow].backspace()){
user=user.substring(0,user.length()-1);
calculate.update(typed);
}
return ;
}
if(!twoLayered[currentRow].canDisplay(typed)){
if(typed!=10){
return;
}
else{
currentRow++;
if(currentRow==rows){
currentRow=0;
show=true;
repaint();
return;
}
}
twoLayered[currentRow].highlightAt(0);
}
else{
twoLayered[currentRow].addChar(typed);
user=user+typed;
calculate.update(typed);
if(startFlag){
calculate.startLesson();
speedFrame.lessonStarted();
startFlag=false;
}
}
if(user.length()>=lesson.length()){
MainScreen.getInstance().lessonEnded();
return;
}
keyboard.highlightKey(lesson.charAt(user.length()));
}
private void clearAllText(){
for(int i=0;i<rows;i++){
twoLayered[i].clearText();
}
}
public void paint(Graphics g){
if(show==true){
displayText();
show=false;
}
super.paint(g);
}
public Dimension getSize(){
return getPreferredSize();
}
public void updateValues(){
MainScreen screen=MainScreen.getInstance();
TempInfo temp=screen.getTempInfo();
temp.updateValues(calculate.getWords(),calculate.getAccuracy(),
calculate.getTime());
temp.updateUserData();
}
}
/** This class contains two richlabels to make HightLightCharacter typing component.
*/
class TwoLayeredComponent extends JPanel{
CharIndicator upper;
RichLabel lower;
private Color uppercolor;
private Color lowercolor;
private Color errorColor;
private int index;
private Sound sound;
TwoLayeredComponent(){
setLayout(new GridLayout(2,1));
upper=new CharIndicator();
lower=new RichLabel();
add(upper);
add(lower);
UserData user=MainScreen.getInstance().getCurrentUser();
sound=new Sound(user.getErrorSound());
uppercolor=user.getLessonColor();
lowercolor=user.getTypingColor();
errorColor=user.getErrorColor();
}
public void setUpperColor(Color c){
uppercolor=c;
}
public void setLowerColor(Color c){
lowercolor=c;
}
public boolean addText(char ch){
if(!upper.nextAllowed())
return false;
upper.addChar(ch,uppercolor);
return true;
}
public void addChar(char ch){
Color temp=null;
if(ch==upper.charAt(index)){
temp=lowercolor;
}
else{
temp=errorColor;
sound.play();
}
lower.addChar(ch,temp);
index++;
upper.highlightChar(index,-1);
upper.clearHighlight(index-1);
}
public boolean canDisplay(char ch){
if(!lower.nextAllowed()){
upper.clearHighlight(index);
return false;
}
return true;
}
public boolean nextAllowed(){
return lower.nextAllowed();
}
public boolean backspace(){
if(index<=0)
return false;
lower.removeChar();
index--;
upper.highlightChar(index,1);
return true;
}
public void highlightAt(int index){
upper.highlightAt(index,null);
}
public int getIndex(){
return index;
}
public void resetIndex(){
index=0;
}
public void clearText(){
upper.clearText();
lower.clearText();
index=0;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -