JAVA上机作业4

这篇博客主要探讨了Java中的事件处理概念,包括事件源对象、事件对象及其关系,并详细解释了如何注册处理器对象和实现处理器接口。此外,还介绍了EventHandler接口的handle方法以及ActionEvent处理器的注册方法。在编程题部分,博主提供了两个实践示例,分别是通过单击按钮从一副牌中随机显示4张卡牌,以及实现四边形在按钮点击后的旋转效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一基础题

15.1
什么是事件源对象?什么是事件对象?描述事件源对象和事件对象之间的关系。

产生一个事件并且触发他的组件称为事件源对象

事件源对象的实例是事件

15.4 请说明如何注册一个处理器对象,以及如何实现一个处理器接口?

     通过源对象注册,注册方法依赖于事件类型,对ActionEvent而言,方法是setOnAction,对于鼠标按下事件,方法是setOnMousePressed,对于按键事件,方法是setOnKeyPressed.

Class ……implementsEventHandler

15.5 EventHandler 接口的处理器方法是什么?

Handle

15.6 对一个按钮注册一个ActionEvent 处理器的注册方法是什么?

setOnAction

二编程题

15.1( 选取4 张卡牌)请写一个程序,可以让用户通过单击Refiesh
按钮以显示从一副52 张卡牌选取的4 张卡牌,如图15-24a所示。

在这里插入图片描述

import javafx.application.Application;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.geometry.*;
import javafx.scene.layout.*;
import javafx.scene.image.*;
import java.util.*;
public class getcards extends Application {

@Override

public void start(Stage primaryStage){

    VBox pane=new VBox(5);



    pane.setPadding(new Insets(5,5,5,5));

    Cardspane cards=new Cardspane();

    pane.getChildren().add(cards);



    Button btRefresh = new Button("Refresh");

    pane.getChildren().add(btRefresh);

    pane.setAlignment(Pos.CENTER);

    VBox.setMargin(btRefresh, new Insets(5,5,5,5));

    btRefresh.setOnAction(e->{cards.refresh();});

    Scene scene=new Scene(pane,400,400);

    primaryStage.setTitle("etcards");

    primaryStage.setScene(scene);

    primaryStage.show();

    }



    public class Cardspane extends HBox{

        private Integer[] cardsNum ={1,2,3,4,5,6,7,8,9

               ,10,11,12,13,14,15,16,17,18,19,120,21,22

               ,23,24,25,26,27,28,29,30,31,32,33,34,35,

               36,37,38,39,40,41,42,43,44,45,46,47,48,49,50

               ,51,52,53,54

        };

        private ArrayList<Integer>list =new ArrayList<>(Arrays.asList(cardsNum));

        private ImageView p1;

        private ImageView p2;

        private ImageView p3;

        private ImageView p4;

        public void CardsPane()

        {

            setSpacing(5);

            Collections.shuffle(list);

            p1=new ImageView("实验五/card/"+Integer.valueOf(list.get(0))+".png");

            p2=new ImageView("实验五/card/"+Integer.valueOf(list.get(1))+".png");

            p3=new ImageView("实验五/card/"+Integer.valueOf(list.get(2))+".png");

            p4=new ImageView("实验五/card/"+Integer.valueOf(list.get(3))+".png");

            super.getChildren().addAll(p1,p2,p3,p4);

        }

public void refresh(){

Collections.shuffle(list);

super.getChildren().removeAll(p1,p2,p3,p4);

p1=new ImageView("实验五/card/"+Integer.valueOf(list.get(0))+".png");

p2=new ImageView("实验五/card/"+Integer.valueOf(list.get(1))+".png");

p3=new ImageView("实验五/card/"+Integer.valueOf(list.get(2))+".png");

p4=new ImageView("实验五/card/"+Integer.valueOf(list.get(3))+".png");

super.getChildren().addAll(p1,p2,p3,p4);

}

    }   

public static void main(String[] args) {

    // TODO Auto-generated method stub

    launch(args);

}
}

15.2 (旋转一个四边形)请写一个程序,在Rotate 按钮被单击时,将一个四边形向右旋转15 度,如图15-24b 所示。

在这里插入图片描述

package 实验五.card;
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.control.*;
import javafx.geometry.*;

public class rebolverectangle extends Application {

private double angle=0;

@Override

public void start(Stage primaryStage)

{

VBox pane=new VBox(10);

pane.setPadding(new Insets(20,20,20,20));

Rectangle re =new

Rectangle(50,50,20,40);

re.setFill(Color.WHITE);

re.setStroke(Color.BLACK);

Button btRotate = new Button("Rotate");

pane.getChildren().addAll(re,btRotate);

pane.setAlignment(Pos.CENTER);

btRotate.setOnAction(e->{changeRectangle(re);});

Scene scene=new Scene(pane,400,400);

primaryStage.setTitle("旋转矩形");

primaryStage.setScene(scene);

primaryStage.show();



}

public void changeRectangle(Rectangle re){

angle+=15;

re.setRotate(angle);

}

public static void main(String[] args) {

    // TODO Auto-generated method stub

 launch(args);

}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值