Java事件处理问题
跪求讲解,大神帮帮我吧。题目的要求是:设有一组英语单词存放在一个数组中,编制一个图形界面程序浏览单词。在界面中安排一个标签显示单词,另有“上一个”、“下一个”两个按钮实现单词的前后翻动。
自己试着做了一下,但结果是错误的。新手上路,请多关照
代码如下:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Demo {
public static void main(String[] args) {
Demo1 A = new Demo1();
A.print_Demo1();
}
}
class Demo1 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
String[] Word = { "one", "two", "three", "four", "five", "six" };
JPanel A1 = new JPanel();
JLabel B1 = new JLabel(Word);
JButton C1 = new JButton("上一个");
JButton C2 = new JButton("下一个");
public void print_Demo1() {
setTitle("单词");
setSize(number.frame_width, number.frame_heigh);
setResizable(false);
setVisible(true);
// 用于窗口的定位
Toolkit B = getToolkit();// 工具包,抽象的类用特殊方法getToolkit()得到一个对象
Dimension C = B.getScreenSize();// Dimension
// 类封装单个对象中组件的宽度和高度(精确到整数)。此处为得到屏幕的宽和高并放在C中
int width = C.width;
int heigh = C.height;
setLocation((width - number.frame_width) / 2,
(heigh - number.frame_heigh) / 2);// 定位在屏幕的中间位置
// 窗口关闭,这是个事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 添加组件
add(A1);
A1.add(B1);
A1.add(C1);
A1.add(C2);
// 添加注册事件监听器
C1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(B1.getText().equals(Word))
JOptionPane.showMessageDialog(getContentPane(), "这是第一个单词!");
else{
for(int i=1;i<6;i++)
{
if(B1.getText().equals(Word));
B1.setText(Word);
}
}
}
});
C2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(B1.getText().equals(Word))
JOptionPane.showMessageDialog(getContentPane(), "这是最后一个单词!");
else
{
for(int i=0;i<5;i++)
{
if(B1.getText().equals(Word));
B1.setText(Word);
}
}
}
});
}
}
class number {
final static int frame_width = 400;
final static int frame_heigh = 100;
}
本帖最后由 零度非安全 于 2017-4-22 21:30 编辑
我猜你的问题是点下一个直接跳 six(在 if 语句后面没有分号的情况下)。{:10_248:}
原因:
对你代码进行分析下,if 语句为什么最后有分号,这是其一,其二,当你第一次按下一个时,此时 JLabel 中值是 Word
for 循环遍历正好相等,那么接下来按下一个,又相等,又接着,继续,一直到 six,所以会出现点一次下一个直接跳到 six
我在那里加了个 break;那为什么在上面一个我没加 break 可以呢?我想把这个问题留给楼主自己去思考 ^_^!
最后我自已测试了一遍:
零度非安全 发表于 2017-4-22 21:27
我猜你的问题是点下一个直接跳 six(在 if 语句后面没有分号的情况下)。
原因:
大神,上一个不加break已理解。刚才手癌将break添错了位置,于是就出现了无法理解的情况,按钮只能发挥一次作用,还请大神讲解一下。感谢!
代码如下:
C2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (B1.getText().equals(Word))
JOptionPane
.showMessageDialog(getContentPane(), "这是最后一个单词!");
else {
for (int i = 0; i < 5; i++) {
if (B1.getText().equals(Word))
B1.setText(Word);
break;
}
}
}
});
break 加错了位置此时程序是如何运行的呢?大神? 本帖最后由 零度非安全 于 2017-4-23 10:19 编辑
注意它提示 Dead code,意思为死代码,无意义的代码(指 i++),为什么?因为一开始 JLabel 的值恰好等于
for 循环遍历第一个数,条件成立则把它变为 Word,但是遇到了 break,整个 for 循环结束,当你第二次点
下一个时,for 循环从 i = 0 遍历,此时 Word 不等于 Word,遇到 break 又结束了 for 循环,所以会出现
下一个按扭只能点一次它会变,而再点却无任何变化,把 break 语句放在 if 语句块内,当 if 条件不成立,就不会
碰到 break 从而立即结束整个循环,它会继续下一次循环继续作判断。 零度非安全 发表于 2017-4-23 09:55
注意它提示 Dead code,意思为死代码,无意义的代码(指 i++),为什么?因为一开始 JPanel 的值恰好等 ...
感谢大神,已明白
页:
[1]