事件驱动编程和动画——习题巩固
习题来自
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);
}
}