实验八 GUI
一、 实验目的
1、 掌握Java语言中窗体的基本用法;
2、 掌握Java语言中窗体控件的基本用法;
3、 掌握Java语言中窗体事件、监听器的基本概念,及其使用方法;
4、 掌握线程在窗体程序中的应用;
5、 掌握基本的绘图技术;
二、 实验要求
1、 根据实验步骤中提出的要求,使用记事本编写相应的Java程序;
2、 使用JDK中提供的javac以及java命令编译、运行自己所编写的Java程序;
3、 根据编译与运行过程中所获得的错误信息修改程序直至获得正确的结果;
4、 记录实验中遇到的各类问题并以及解决办法。
三、 实验步骤
1、 窗体、基本控件、事件
(1) 下面的程序将完成两个数的相加,请将其代码补充完整:
public class EventFrame extends {
;
JTextField txtA,txtB;
public EventFrame(){
lblDisplay=new JLabel();
lblDisplay.setText(" 0 + 0 = 0 ");
lblDisplay. (SwingConstants.CENTER);
lblDisplay. (new Font("Times New Rome",Font.BOLD, 30));
【补充】
JPanel pnl=new JPanel();
add(lblDisplay);
pnl.add(txtA);
pnl.add(txtB);
pnl.add(btnAdd);
btnAdd.addActionListener(new (){
public void actionPerformed( event) {
【补充】
}
});
【补充】
}
}
(2) 你完成的程序,窗体关闭后能否自动结束?其关键性的语句是什么?
2、 窗体与线程
(1) 已知有如下代码:
public class ThreadFrame extends JFrame {
int n=100000000;
JLabel lblDisplay;
JButton btnCalculate;
ThreadFrame(){
lblDisplay=new JLabel();
lblDisplay.setText("f(n) = "+result);
lblDisplay.setHorizontalAlignment(SwingConstants.CENTER);
lblDisplay.setFont(new Font("Times New Rome",Font.BOLD, 30));
btnCalculate=new JButton("Calculate");
btnCalculate.setFont(new Font("Times New Rome",Font.BOLD, 20));
btnCalculate.setHorizontalAlignment(SwingConstants.CENTER);
btnCalculate.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
btnCalculate.setEnabled(false);
btnCalculate.setText("Calculating, please wait ...");
long result=f(n,0,10);
lblDisplay.setText("f(n) = "+result);
btnCalculate.setEnabled(true);
btnCalculate.setText("Calculate again");
}
});
add(lblDisplay);
add(btnCalculate,BorderLayout.SOUTH);
setSize(600, 400);
setLocation(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
long f(int n,long start,long end){
long result=0;
for (int i=0;i<n;i++){
result+=(long)(Math.random()*(end-start)+start);
}
return result;
}
public static void main(String[] args) {
new ThreadFrame();
}
}
(2) 运行该程序,观察该程序的功能。
(3) 添加属性:ThreadFrame frame=this;
(4) 修改事件响应处理代码:
public void actionPerformed(ActionEvent event) {
btnCalculate.setEnabled(false);
btnCalculate.setText("Calculating, please wait ...");
frame.setCursor(Cursor.WAIT_CURSOR);
new Thread(frame).start();
}
(5) 实现Runnable接口
public class ThreadFrame extends JFrame implements Runnable{
……
public void run() {
long result=f(n,0,10);
lblDisplay.setText("f(n) = "+result);
btnCalculate.setEnabled(true);
btnCalculate.setText("Calculate again");
frame.setCursor(Cursor.DEFAULT_CURSOR);
}
(6) 该程序经过修改后运行的效果与原来的程序有什么不同,请简述其原因。
3、 绘图
(1) 按要求补充下面的代码
public class GraphicsFrame extends JFrame{
public GraphicsFrame(){
this.addMouseListener(
new (){
public void mouseClicked( e) {
【单击左键画圆,单击右键画矩形】
}
}
);
setBounds(100,100,600,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void paint( ){
【窗口重绘时,显示红色、字体大小为30的文字“Java绘图程序”】
}
【程序入口】
}
(2) 如果将第二空处修改为MouseListener,程序应当如何修改?简述Adapter与Listener之间的关系。
四、 实验结果
五、 实验小结