单词拼写

作者在 2011-12-25 22:09:31 发布以下内容
import java.awt.*;
import java.awt.event.*;

public class LetterLabel extends Button implements FocusListener,
MouseListener{
    //构造器
    LetterLabel(){
        addFocusListener(this); //将当前对象注册为自身的焦点事件监视器
        addMouseListener(this); //将当前对象注册为自身的鼠标事件监视器
        
        this.setBackground(Color.cyan);//青色
        this.setFont(new Font("",Font.BOLD,32));//字体
    }
    public static LetterLabel[] getLetterLabel(int n){
        LetterLabel a[]=new LetterLabel[n];
        for (int i = 0; i<a.length; i++){
            a[i]=new LetterLabel();
        }
        return a;
    }
    
    public void focusGained(FocusEvent e){
        this.setBackground(Color.red);
    }
    public void focusLost(FocusEvent e){
        this.setBackground(Color.cyan);
    }
    
    public void mousePressed(MouseEvent e){
        this.requestFocus();
    }
/*???????????????????????????????????????????*/    
    public void setText(char c){
        setLabel(""+c);
    }
    public char[] getText(){
        return getLabel().toCharArray();
    }
/*???????????????????????????????????????????*/        
    public void mouseClicked(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}    
    public void mouseExited(MouseEvent e){}
}
 

/*产生随机字符组合*/
public class RondomString{
    String str="";
    //获取字符串
    public String getRondomString(String s){
        StringBuffer strBuffer=new StringBuffer(s);
        int m=strBuffer.length();//字符串的长度
        for (int i = 0; i<m; i++){
            int index=(int)(Math.random()*strBuffer.length());
            char c=strBuffer.charAt(index);
            str+=c;
            //移除此序列指定位置的 char。此序列将缩短一个 char。
            strBuffer=strBuffer.deleteCharAt(index);
        }
        return str;
    }
}
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SpellingWordFrame extends Frame implements KeyListener,
ActionListener{
    //组件声明
    TextField inputWord;
    Button button;
    LetterLabel label[];
    Panel northP,centerP;
    Box wordBox;
    String hintMessage="用鼠标单击字母。按左右键交换字母,将其排列成所输入的单词";
    Label messageLabel=new Label(hintMessage);
    String word="";
    
    //构造器
    SpellingWordFrame(){
        inputWord=new TextField(12);
        button=new Button("确定");
        button.addActionListener(this);//注册事件监听器
        inputWord.addActionListener(this);
        
        //北区面板
        northP=new Panel();
        northP.add(new Label("输入一个英文单词"));
        northP.add(inputWord);
        northP.add(button);
        //中区面板
        centerP=new Panel();
        wordBox=Box.createHorizontalBox();//创建水平Box
        centerP.add(wordBox);
        
        //整个窗体布局设置
        this.add(northP,BorderLayout.NORTH);
        this.add(centerP,BorderLayout.CENTER);
        this.add(messageLabel,BorderLayout.SOUTH);
        //设置坐标和大小
        this.setBounds(200,200,350,180);
        this.setVisible(true);//可见
        this.validate();//验证此容器及其所有子组件。
        
        
//响应关闭按钮
        addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
        
    }
    
    //运行时执行下面的操作
    public    void actionPerformed(ActionEvent e){
        word=inputWord.getText();//获取文本中的字符
        int n=word.length();//把字符串的长度赋值给n
        RondomString rondom=new RondomString();
        String randomWord=rondom.getRondomString(word);
        wordBox.removeAll();
        messageLabel.setText(hintMessage);
        
        if(n>0){
            label=LetterLabel.getLetterLabel(n);
            for (int i = 0; i<label.length; i++){
                label[i].addKeyListener(this); //讲当前窗口注册为label[i]的键盘监视器
                label[i].setText(randomWord.charAt(i));  //
                   wordBox.add(label[i]);

            }
            this.validate();
            this.inputWord.setText(null);
            this.label[0].requestFocus();
        }
    }
    
    //按下某个键时调用此方法
    public void keyPressed(KeyEvent e){
        LetterLabel sourceLabel=(LetterLabel)e.getSource();
        int index=-1;
        if(e.getKeyCode()==KeyEvent.VK_LEFT){
            for (int i = 0; i<label.length; i++){
                if(label[i]==sourceLabel){
                    index=i;
                    break;
                }
            }
////////////////////////////////////////////////////////
                if(index!=0){
                    char temp=label[index].getText()[0];
                    label[index].setText(label[index-1].getText()[0]);
                    label[index-1].setText(temp);
                    label[index-1].requestFocus();
                }
        }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
            for (int i = 0; i<label.length; i++){
                if(label[i]==sourceLabel){
                    index=i;
                    break;
                }
            }
            if(index!=label.length-1){
                char temp=label[index].getText()[0];
                label[index].setText(label[index+1].getText()[0]);
                label[index+1].setText(temp);
                label[index+1].requestFocus();
            }
        }
        this.validate();
    }
    //键入某个键时调用此方法
    public void keyTyped(KeyEvent e){};
    //释放某个键时调用此方法
    public void keyReleased(KeyEvent e){
        String success="";
        for (int i = 0; i<label.length; i++){
            char str=label[i].getText()[0];
            success+=str;
        }
        
        if(success.equals(word)){
            messageLabel.setText("恭喜你,成功了");
            for (int i = 0; i<label.length; i++){
                label[i].removeKeyListener(this);
                label[i].removeFocusListener(label[i]);
                label[i].setBackground(Color.green);
            }
            inputWord.requestFocus();
        }
    }
}
 

public class WordMianClass{
    
    public static void main(String[] agrs){
        new SpellingWordFrame();    
    }
}
 
java codes | 阅读 1124 次
文章评论,共0条
游客请输入验证码
浏览17064次
最新评论