一、实验目的
【目的要求】
了解小项目的开发流程
掌握界面设计及事件处理模型
掌握匿名类在事件处理中的灵活应用
【注意事项】
注意电源插座的用电安全;
遵守计算机的使用注意事项;
防范病毒。
【使用工具】
电脑
window系统
JDK环境
eclipse开发环境
三、实验内容:(编写程序调试输出结果)
(删除此行,同学们以下填写实验步骤,程序框图/代码/运行结果截图等)
【相关知识】
1.FocusListener焦点事件监听接口是在对象获得焦点,或失去焦点时触发的事件监听器,它有两个事件focusGained和focusLost,使用焦点监听接口时需要重写这两个事件方法,用于事件处理。
2.ActionListener是动作事件监听接口,主要有actionPerformed处理动作事件
3.KeyListener键盘事件监听接口,主要有keyPressed(按下事件)、keyReleased(释放事件)、keyTyped(打字事件)键盘事件处理
1.英语单词拼写训练程序,要求,用户输入一个单词,将这个单词的字母次序打乱,显示在窗体上,提示:用鼠标点击字母,按左右箭头交换字母,并将其排列成所输入的单词。
通过鼠标点击字母,并通过键盘方向键调节字母次序,当字母次序调整正确时,提示:恭喜你,你成功了!
提示:
绘制界面,包括JLabel对象“输入单词”、JTextField对象用于输入单词、包括JButton对象“确定”。
实现单词乱序的程序
实现单字母JLabel数组,并对获得焦点的字母设置青色背景
实现动作事件处理和键盘事件处理
package P4;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Game extends JFrame implements FocusListener, KeyListener {
//文本框
TextField tf;
//
JPanel pane1, pane2, pane3;
//标签
JLabel lab1, lab2, lab3;
//按钮
JButton bu, temp;
//按钮集合
JButton[] bx = new JButton[10];
String str, st;
int n = 0;
char c;
char[] s;
Game() {
tf = new TextField(10);
lab1 = new JLabel("请输入一个英文单词");
lab2 = new JLabel("用鼠标单击字母,按左右箭头交换字母,将其排列成所输入的单词");
bu = new JButton("确定");
bu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
change1(e);
}
});
pane1 = new JPanel();
pane1.add(lab1);
pane1.add(tf);
pane1.add(bu);
add(pane1, BorderLayout.NORTH);
pane2 = new JPanel();
pane2.add(lab2);
add(pane2, BorderLayout.SOUTH);
}
public void change1(ActionEvent e) {
str = tf.getText();
n = str.length();
if (e.getActionCommand().equals("确定")) {
pane3 = 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 tmp = p[r];
p[r] = p[i];
p[i] = tmp;
}
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.red);// 设置字体颜色
bx[i].addFocusListener(this);
bx[i].addKeyListener(this);
pane3.add(bx[i]);
add(pane3, BorderLayout.CENTER);
}
}
tf.setText(null);
setVisible(true);
}
}
public static void main(String[] args) {
Game game = new Game();
game.setTitle("单词排序游戏");
game.setBounds(300, 200, 500, 400);
game.setResizable(false);
game.setVisible(true);
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@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);
}
}
}
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);
}
}
}
}
}
}
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 keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}