【Java小项目实训】编写一个窗体程序模拟单词拼写

实训要求
窗口中有一个TextFie1d对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的北面。用户在TextField 对象中输入一个英文单词,然后回车或单击按钮,程序将创建若干个标签,其个数刚好等于英文单词所包含的字母的标签,而且每个标签上的名字刚好是英文单词中的一个字母。要求将这些标签按行添加到一个面板中,然后将该面板添加到窗口的中心。用户用鼠标单击一个标签后,通过按下键盘上的“一”“一”键交换相邻标签上的字母,是的这些标签上字母的排列顺序和英文单词中字母的顺序相同。

参考结果

1、初始界面

2、输入单词后顺序被打乱(如exception),并且清空文本框中的单词

3、鼠标点击字母会更换颜色,箭头← →可进行移动

4、单词拼写正确后

 5、再次输入新的单词(file)并点击确定

代码加注释

public class WordSpellingGamePlay {
	public static void main(String[] args) {
		WordSpellingGame game = new WordSpellingGame();
		game.setBounds(300, 200, 900, 250); // 设置窗体大小
		game.setResizable(false);  //设置窗体是否可以被调整大小
		game.setVisible(true); 
		game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class WordSpellingGame extends JFrame implements FocusListener, KeyListener {

	private static final long serialVersionUID = 1L;

	private TextField tf; // 输入单词
	private JLabel lab1; // 提示输入:"请输入一个英文单词"
	private JButton bu; // 确定按钮,添加监听
	private JPanel pane1;

	private JLabel lab2; // 下方操作提示语
	private JPanel panel2;
	private String str;
	
	private int n = 0;
	private JPanel panel3;
	private JButton[] bx = new JButton[10]; // 存放打乱后的单词字母

	WordSpellingGame() {
		tf = new TextField(10);
		lab1 = new JLabel("请输入一个英文单词");
		bu = new JButton("确定");
		bu.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try { // 这里是为了输入新的单词时,移除旧的单词
					for (int i = 0; i < n; i++) {
						panel3.remove(bx[i]);
					}
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				change1(e); // 点击确定打乱单词顺序
			}
		});
		pane1 = new JPanel();
		pane1.add(lab1);
		pane1.add(tf);
		pane1.add(bu);
		add(pane1, BorderLayout.NORTH); // 放在布局北侧

		lab2 = new JLabel("用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词");
		panel2 = new JPanel();
		panel2.add(lab2);
		add(panel2, BorderLayout.SOUTH); // 放在布局南侧
	}

	public void change1(ActionEvent e) {
		str = tf.getText(); // "happy"
		n = str.length(); // 单词长度:5
		if (e.getActionCommand().equals("确定")) {
			panel3 = new JPanel();
			// 打乱顺序
			for (int i = 1; i < n; i++) {
				int[] p = new int[n];
				for (i = 0; i < n; i++) {
					p[i] = i + 1;
				}
				for (i = 0; i < n; i++) {
					int r = (int) (Math.random() * n);
					int temp = p[r];
					p[r] = p[i];
					p[i] = temp;
				}
				Font font = new Font(str, Font.PLAIN, 46);
				for (i = 0; i < n; i++) {
					char c = str.charAt(p[i] - 1); // 随机字符串
					bx[i] = new JButton("" + c);
					bx[i].setPreferredSize(new Dimension(80, 80)); // 设置按钮大小
					bx[i].setFont(font); // 设置字体大小
					bx[i].setForeground(Color.black); // 设置字体颜色
					bx[i].addFocusListener(this);
					bx[i].addKeyListener(this);
					panel3.add(bx[i]);
					add(panel3, BorderLayout.CENTER);
				}
			}
			tf.setText(null);
			setVisible(true);
		}
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// 无

	}

	@Override
	public void keyPressed(KeyEvent e) {
		for (int i = 0; i < str.length(); i++) {
			if (bx[i] == (JButton) e.getSource()) {
				if (e.getKeyCode() == KeyEvent.VK_LEFT) {
					go(i, "left");
					char[] str2 = new char[n];
					for (int k = 0; k < n; k++) {
						str2[k] = bx[k].getText().charAt(0);
					}
					String s1 = new String(str2);
					if (s1.equals(str)) {
						lab2.setText("恭喜你,你成功了!");
						for (int p = 0; p < n; p++) {
							bx[p].setForeground(Color.green);
						}
					}
				} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
					go(i, "right");
					char[] str2 = new char[n];
					for (int k = 0; k < n; k++) {
						str2[k] = bx[k].getText().charAt(0);
					}
					String s1 = new String(str2);
					if (s1.equals(str)) {
						lab2.setText("恭喜你,你成功了!");
						for (int p = 0; p < n; p++) {
							bx[p].setForeground(Color.green);
						}
					}
				}
			}
		}
	}

	public void go(int i, String st1) {
		if (st1.equals("left") && i >= 1) {
			String temp = bx[i].getText();
			String temp1 = bx[i - 1].getText();
			bx[i].setText(temp1);
			bx[i - 1].setText(temp);
		} else if (st1.equals("right") && i <= n - 2) {
			String temp = bx[i].getText();
			String temp1 = bx[i + 1].getText();
			bx[i].setText(temp1);
			bx[i + 1].setText(temp);
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// 无

	}

	@Override
	public void focusGained(FocusEvent e) {
		for (int i = 0; i < str.length(); i++) {
			if (bx[i] == (JButton) e.getSource()) {
				bx[i].setForeground(Color.red);
			}
		}
	}

	@Override
	public void focusLost(FocusEvent e) {
		for (int i = 0; i < str.length(); i++) {
			if (bx[i] == (JButton) e.getSource()) {
				bx[i].setForeground(Color.black);
			}
		}

	}
}
发布了23 篇原创文章 · 获赞 1 · 访问量 1878

猜你喜欢

转载自blog.csdn.net/xianyu9264/article/details/103324377