事件驱动编程和动画——习题巩固

事件驱动编程和动画——习题巩固

习题来自
Java语言程序设计(进阶篇)第十五章 梁勇

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

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test1501 extends Application {

	@Override
	public void start(Stage primaryStage) throws Exception {
		// TODO Auto-generated method stub
		BorderPane bp=new BorderPane();
		HBox hb=new HBox();
		StackPane sp=new StackPane();
		bp.setCenter(hb);
		bp.setBottom(sp);

		addCard(hb);

		Button but=new Button("Refresh");

		but.setOnAction(e -> {
			hb.getChildren().clear();
			addCard(hb);
		});
		sp.getChildren().add(but);


		Scene scene = new Scene(bp,300,150);
		primaryStage.setTitle("ShowImage"); // Set the stage title
		primaryStage.setScene(scene); // Place the scene in the stage
		primaryStage.show();
	}

	private void addCard(HBox hb) {
		for(int i=0;i<4;i++)
		{
			String fileName=(int)(Math.random()*52+1)+".png";
			Image image = new Image("file:card/"+fileName);
			hb.getChildren().add(new ImageView(image));
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		launch(args);
	}

}

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

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Test1502 extends Application {

	@Override
	public void start(Stage primaryStage) throws Exception {
		// TODO Auto-generated method stub
		BorderPane bp=new BorderPane();
		StackPane spC=new StackPane();
		StackPane spB=new StackPane();

		bp.setCenter(spC);
		bp.setBottom(spB);

		Rectangle r=new Rectangle(100,100,150,100);
		r.setFill(Color.WHITE);
		r.setStroke(Color.BLACK);
		spC.getChildren().add(r);

		Button but=new Button("Rotate");
		but.setOnAction(e -> {
			r.setRotate(r.getRotate()+15);
		});

		spB.getChildren().add(but);

		Scene scene = new Scene(bp,300,300);
		primaryStage.setTitle("ShowImage"); // Set the stage title
		primaryStage.setScene(scene); // Place the scene in the stage
		primaryStage.show();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		launch(args);
	}

}

15.3 ( 移动小球)编写一个程序,在面板上移动小球。应该定义一个面板类来显示小球,并提供向左、向右、向上和向下移动小球的方法,如图 15-24c所示。请进行边界检査以防止球完全移到视线之外。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Test1503 extends Application {

	@Override
	public void start(Stage primaryStage) throws Exception {
		// TODO Auto-generated method stub
		BorderPane bp=new BorderPane();
		Pane p=new Pane();
		HBox hb=new HBox();
		hb.setAlignment(Pos.TOP_CENTER);
		hb.setSpacing(5);
		hb.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));

//		hb.set

		bp.setCenter(p);
		bp.setBottom(hb);

		Circle c=new Circle(100,100,60);
		p.getChildren().add(c);

		Button left=new Button("Left");
		left.setOnAction(e ->{
			double remain=c.getCenterX()-5;
			if(remain>c.getRadius())
			c.setCenterX(remain);
			else
			c.setCenterX(c.getRadius());
		});
		hb.getChildren().add(left);

		Button right=new Button("right");
		right.setOnAction(e ->{
			double remain=c.getCenterX()+5;
//			System.out.print(bp.getWidth()-c.getRadius());
			if(remain<p.getWidth()-c.getRadius())
			c.setCenterX(remain);
			else
			c.setCenterX(p.getWidth()-c.getRadius());
		});
		hb.getChildren().add(right);

		Button up=new Button("up");
		up.setOnAction(e ->{
			double remain=c.getCenterY()-5;
			if(remain>c.getRadius())
			c.setCenterY(remain);
			else
			c.setCenterY(c.getRadius());
		});
		hb.getChildren().add(up);

		Button down=new Button("down");
		down.setOnAction(e ->{
			double remain=c.getCenterY()+5;
			if(remain<p.getHeight()-c.getRadius())
			c.setCenterY(remain);
			else
			c.setCenterY(p.getHeight()-c.getRadius());
		});
		hb.getChildren().add(down);

		Scene scene = new Scene(bp,300,300);
		primaryStage.setTitle("ShowImage"); // Set the stage title
		primaryStage.setScene(scene); // Place the scene in the stage
		primaryStage.show();

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		launch(args);
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值