黑马程序员技术交流社区
标题:
Swing显示窗体与事件监听的联合应用,算数题答题
[打印本页]
作者:
施大勇
时间:
2013-9-18 16:49
标题:
Swing显示窗体与事件监听的联合应用,算数题答题
本帖最后由 施大勇 于 2013-9-21 12:32 编辑
<DIV class=blockcode>
<BLOCKQUOTE>
<BLOCKQUOTE>
复制代码
<P><package day4;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class KeyEventDemo extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){//采用事件队列的方式启动线程
@Override
public void run() {
KeyEventDemo frame=new KeyEventDemo();
}
});
}
//抽取窗口中的成员
private JLabel label=new JLabel("请回答下面的数学题计算结果");
private JLabel labelnum_1;
private JLabel labelnum_2;
private JLabel label_1;
private JLabel label_2;
private JTextField resultText;
private JPanel panel;
private JLabel showText;
private int n1=50;
private int n2=30;
//在构造方法中设置窗体的各个组件
public KeyEventDemo(){
super();
setBounds(100,100,500,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container=getContentPane();
container.setLayout(new BorderLayout());
panel=new JPanel(new FlowLayout(FlowLayout.CENTER));
labelnum_1=new JLabel();
labelnum_2=new JLabel();
labelnum_1.setText(n1+"");
labelnum_2.setText(n2+"");
label_1=new JLabel("+");
label_2=new JLabel("=");
resultText=new JTextField("0",10);
showText=new JLabel("这里显示提示信息");
panel.add(labelnum_1);
panel.add(label_1);
panel.add(labelnum_2);
panel.add(label_2);
panel.add(resultText);
container.add(label,BorderLayout.NORTH);
container.add(panel,BorderLayout.CENTER);
container.add(showText,BorderLayout.SOUTH);</P>
<P>//添加事件监听
resultText.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
do_result_keyPressed(e); //事件处理方法向外抽取
}
});
setVisible(true);
}
protected void do_result_keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ENTER){
String result=resultText.getText();
int resultSum=0;
try {
resultSum = Integer.parseInt(result);
} catch (Exception e2) {
showText.setText("");
showText.setText("结果只能为数字,不能包含字母");
resultText.selectAll();
return ; //发生异常处理过后要返回继续向下执行.
}
if (resultSum==n1+n2){
showText.setText("");
showText.setText("回答正确");
randomNumber();
resultText.selectAll();
}else{
showText.setText("");
showText.setText("回答错误,请重新回答。");
resultText.selectAll();
}
}
}
private void randomNumber() {
n1=(int)(Math.random()*100+1);
n2=(int)(Math.random()*100+1);
System.out.println(n1+"::::::::"+n2);
labelnum_1.setText(n1+"");
labelnum_2.setText(n2+"");
}
}
></P>
复制代码
作者:
黄文伯
时间:
2013-9-18 21:08
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2