java基础:10.6 事件驱动

当运行一个JAVA GUI程序时,程序和用户进行交互,并且事件驱动它的执行。这叫事件驱动编程。产生一个事件并且触发它的组件称为事件源对象,或者简单称为源对象或者源组件。例如,一个按钮是一个按钮单击动作事件的源对象。一个事件是一个事件类的实例。可以通过EventObject 类中的getSource()实例方法来确定一个事件的源对象

Java 事件类的根类是java.util.EventObject。JavaFX 的事件类的根类javafx.event.Event

Event 包括:ActionEvent / InputEvent / WindowEvent 

如果一个组件可以触发一个事件,那么这个组件的任何子类都可以触发同样类型的事件。比如,每个JavaFX 形状、布局面板和组件都可以融发MouseEvent 和KeyEvent 事件,因为Node 是形状、布局面板和组件的超类。

要成为一个动作事件的处理器,必须满足两个要求:
1 ) 该对象必须是EventHandler <T extends Event> 接口的一个实例。接口定义了所有处理器的共同行为。<T extends Event> 表示T 是一个Event 子类型的泛型。
2) EventHandler 对象handler 必须使用方法source.setOnAction(handler)和事件源对象注册。处理器对象必须通过源对象进行注册。注册方法依赖于事件类型。对ActionEvent 而言,方法是setOnAction。对一个鼠标按下事件来说,方法是setOnMousePressed。对于一个按键事件,方法是set0nKeyPressed。

学习代码:点击按钮可以放大/缩小圆

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
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.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class Chapter15_2 extends Application {
	private CirclePane circlePane = new CirclePane();
	
	@Override
	public void start(Stage primaryStage) {   
		HBox hbox = new HBox(10);
		hbox.setSpacing(10);
		hbox.setAlignment(Pos.CENTER);
		Button btEnlarge = new Button("Enlarge");
		Button btShrink = new Button("Shrink");
		hbox.getChildren().add(btEnlarge);
		hbox.getChildren().add(btShrink);
		
		//create and register the handler
		btEnlarge.setOnAction(new EnlargeHandler());
		btShrink.setOnAction(new ShrinkHandler());
		
		BorderPane borderpane = new BorderPane();
		borderpane.setCenter(circlePane);
		borderpane.setBottom(hbox);
		BorderPane.setAlignment(hbox,Pos.CENTER);
		
		Scene scene = new Scene(borderpane,200,150);
		primaryStage.setTitle("ControlCircle");
		primaryStage.setScene(scene);
		primaryStage.show();
		
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Application.launch(args);
	}

	class EnlargeHandler implements EventHandler <ActionEvent> {
		@Override
		public void handle(ActionEvent e) {
			circlePane.enlarge();
		}
	}

	class ShrinkHandler implements EventHandler <ActionEvent> {
		@Override
		public void handle(ActionEvent e) {
			circlePane.shrink();
		}
	}
}

class CirclePane extends StackPane{
	private Circle circle = new Circle(50);
	
	public CirclePane() {
		getChildren().add(circle);
	    circle.setFill(Color.WHITE);
	    circle.setStroke(Color.BLACK);
	}
	
	public void enlarge() {
		circle.setRadius(circle.getRadius() + 2 );
	}
	
	public void shrink() {
		circle.setRadius(circle.getRadius() >2 ? circle.getRadius()-2 : circle.getRadius());
	}    
}


 

转载于:https://www.cnblogs.com/l20902/p/10610911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据题意,我们需要将该学院综合楼网络划分为3个子网,分别为办公室子网、教室子网和实验室及机房子网。由于给定的IP地址块为10.6.4.0/22,可以将其转化为二进制表示:00001010 00000110 00000100 00000000/22。其中,22表示前缀长度,即网络部分的长度为22位,主机部分的长度为10位。 为了划分子网,我们需要确定每个子网的网络部分长度。根据题意,每个子网所需要的IP地址数量分别为办公室200台、教室200台和实验室及机房500台,因此可以分别计算出每个子网所需的主机位长度: - 办公室子网:最多200台计算机,需要2^8=256个IP地址,因此主机位长度为8位。 - 教室子网:最多200台计算机,需要2^8=256个IP地址,因此主机位长度为8位。 - 实验室及机房子网:最多500台计算机,需要2^9=512个IP地址,因此主机位长度为9位。 接下来,我们可以根据主机位长度来计算每个子网的网络部分长度。由于IP地址块的前22位已经被分配了,因此剩下的10位需要分配给三个子网,可以采用如下方案: - 办公室子网:10.6.4.0/24(网络部分长度为24位,主机部分长度为8位) - 教室子网:10.6.5.0/24(网络部分长度为24位,主机部分长度为8位) - 实验室及机房子网:10.6.6.0/23(网络部分长度为23位,主机部分长度为9位) 因此,该学院综合楼网络可以划分为三个子网,地址块分别为10.6.4.0/24、10.6.5.0/24和10.6.6.0/23。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值