java 窗口模拟单词拼写_Java 实训 编写一个窗体程序模拟单词拼写

这篇博客介绍了一个Java实训项目,通过创建一个窗体应用程序,模拟单词拼写过程。用户输入单词后,程序会生成相应数量的标签,用户通过点击标签并使用键盘方向键交换字母顺序,以达到正确拼写单词的目标。博客提供了详细的代码实现和运行结果展示。
摘要由CSDN通过智能技术生成

实训要求:

窗口中有一个TextFie1d对象和一个按钮对象,将这两个对象添加到

一个面板中,然后将该面板添加到窗口的北面。

用户在TextField 对象中输入一个英文单词,然后回车或单击按钮,

程序将创建若干个标签,其个数刚好等于英文单词所包含的字母的标签,

而且每个标签上的名字刚好是英文单词中的一个字母。要求将这些标签按

行添加到一个面板中,然后将该面板添加到窗口的中心。

用户用鼠标单击一个标签后,通过按下键盘上的“一”“一”键交换相

邻标签上的字母,是的这些标签上字母的排列顺序和英文单词中字母的顺

序相同。

参考结果:

在初始界面中输入英文单词

ec88eca37114cc00d7491811f45256ad.png

代码:

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.black);// 设置字体颜色

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.setBounds(300, 200, 900, 250);

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

}

}

运行结果:

7af44cd24a666a924bd8ed96c65e644e.png

df6a306094dcc699545b1393950d1dcd.png

cb8308d1d32cad01fa8fbc9f2db1aecd.png

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值