Java教程 第90页

Java 解释器模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 解释器模式

Java设计模式 – 解释器模式 我们通常使用解释器模式来评估语言语法或表达。 这种类型的模式是行为模式之一。 例子 interface Expression { public boolean evaluate(String context); } class IsInExpression implements Expression { private String data; public IsInExpression(String data) { this.data = data; } @Override public boolean evaluate(String context) { if (context.contains(data)) { return true; } return false; } } class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean evaluate(String context) { return expr1.evaluate(context) || expr2.evaluate(context); } } class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean evaluate(String context) {...

Java 原型模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 原型模式

Java设计模式 – 原型模式 原型模式是创建模式之一。 原型模式有助于创建具有更好性能的重复对象。 在原型模式中,将返回一个现有对象的克隆,而不是创建新的对象。 我们使用原型设计模式,如果创建一个新对象的成本是昂贵和资源密集型。 例子 以下代码显示如何使用Prototype Pattern创建对象。 首先它创建一个Shape抽象类,实现Cloneable接口。 abstract class Shape implements Cloneable { private String id; protected String type; abstract void draw(); public String getType(){ return type; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Object clone() { Object clone = null; try { clone = super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return clone; } } 然后它创建三个具体的类扩展Shape类。 class Rectangle extends Shape { public Rectangle(){ type = "Rectangle"; } @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } class Square extends Shape { public Square(){ type = "Square"; } @Override public void draw() { System.out.println("Inside Square::draw() method."); } } class Circle extends Shape {...

Java 生成器模式

Java设计模式 – 生成器模式 生成器模式用于使用简单对象创建复杂对象。它从小而简单的对象逐步创建更大的对象。 生成器模式是另一个创建模式。 例如,当创建一个窗口作为我们应用程序的主窗口时,我们需要创建一个菜单,一个工具栏,然后添加菜单和工具栏。 对于我们要创建的每个窗口,我们需要创建一个空窗口,创建菜单,创建工具栏,将菜单和工具栏安装到窗口。 我们可以使用构建器模式来隐藏如何创建窗口的实现。 例子 class Menu { } class ToolBar { } class MainWindow { Menu menu; ToolBar toolBar; public Menu getMenu() { return menu; } public void setMenu(Menu menu) { this.menu = menu; } public ToolBar getToolBar() { return toolBar; } public void setToolBar(ToolBar toolBar) { this.toolBar = toolBar; } } class WindowBuilder{ public static MainWindow createWindow(){ MainWindow window = new MainWindow(); Menu menu = new Menu(); ToolBar toolBar = new ToolBar(); window.setMenu(menu); window.setToolBar(toolBar); return window; } } public class Main { public static void main(String[] args) { MainWindow object = WindowBuilder.createWindow(); } }

Java 抽象工厂模式-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 抽象工厂模式

Java设计模式 – 抽象工厂模式 抽象工厂模式是另一个创建模式。 抽象工厂模式,也称为工厂的工厂,有一个工厂创建其他工厂。 当使用抽象工厂模式时,我们首先使用超级工厂创建工厂,然后使用创建的工厂创建对象。 例子 下面的代码展示了如何使用抽象工厂模式。 我们将要创建形状和打印机。对于形状,我们会有圆形,矩形和正方形。对于打印机,我们将有纸张打印机,网络打印机和屏幕打印机。 对于shape,我们将创建Shape界面,如下所示: interface Shape { void draw(); } 然后我们创建实现Shape接口的具体类。 class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } } 我们为打印机创建一个界面。 interface Printer{ void print(); } 然后我们创建实现Printer接口的具体类。 class PaperPrinter implements Printer{ @Override public void print() { System.out.println("paper"); } } class WebPrinter implements Printer{ @Override public void print() { System.out.println("web"); } } class ScreenPrinter implements Printer{ @Override public void print() { System.out.println("screen"); } } 最后,我们创建一个抽象类来获取打印机和形状对象的工厂。 abstract class AbstractFactory { abstract Printer getPrinter(String type); abstract Shape getShape(String shape) ; }...

Java教程中的脚本 - Java简介中的脚本

Java教程中的脚本 – Java简介中的脚本 例子… Java Scripting API可以执行以任何脚本语言编写的脚本编译成Java字节码。 JDK 6和7附带一个名为Rhino JavaScript引擎的脚本引擎。在JDK 8中,Rhino JavaScript引擎已被替换为一个名为Nashorn的脚本引擎。 Nashorn发动机可以用两种方式: be embedded into the JVM and invoked from the Java programs directly be invoked from a command prompt using the jjs command-line tool.

Java教程中的脚本 - Java HelloWorld中的脚本-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java教程中的脚本 - Java HelloWorld中的脚本

Java教程中的脚本 – Java HelloWorld中的脚本 Nashorn脚本引擎可以通过两种方式调用:通过将引擎嵌入JVM或使用 jjs 命令行工具。 在Java中执行您的第一个脚本 下面的代码显示了如何使用Nashorn在标准输出上打印消息。 import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /* w ww.j av a 2 s. c om*/ public class Main { public static void main(String[] args) { // Create a script engine manager ScriptEngineManager manager = new ScriptEngineManager(); // Obtain a script engine from the manager ScriptEngine engine = manager.getEngineByName("JavaScript"); // Store the script in a String String script = "print("hi from www.w3cschool.cn!")"; try { // Execute the script engine.eval(script); } catch (ScriptException e) { e.printStackTrace(); } } } 上面的代码生成以下结果。 jjs命令行工具 上面的代码生成以下结果。… jjs 工具可用于执行Nashorn脚本或以交互方式执行脚本。 jjs 工具可用于执行Nashorn脚本或以交互方式执行脚本。… C:\>jjs jjs> print("hi from www.w3cschool.cn!"); hi from www.w3cschool.cn! jjs> quit() 以下代码显示如何使用jjs命令行工具运行js源文件。 helloscripting.js文件的内容 // helloscripting.js print("hi from www.w3cschool.cn!"); 以下命令执行存储在helloscripting.js中的脚本。 C:\>jjs helloscripting.js hi from www.w3cschool.cn! C:\>

JavaFX事件过滤器-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

JavaFX事件过滤器

JavaFX教程 – JavaFX事件过滤器 事件过滤器允许我们在事件捕获阶段处理事件。 节点可以具有用于处理事件的一个或多个过滤器。 我们可以为多个节点使用一个过滤器来处理多个事件类型。 来自父节点的事件过滤器负责处理其子节点,并可拦截事件并防止子节点对事件执行操作。 注册事件过滤器 事件过滤器是EventHandler接口的实现。要注册过滤器,请使用addEventFilter()方法。 // Register an event filter for a single node and a specific event type scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { public void handle(MouseEvent e) { System.out.println("mouse clicked"); }; }); 完整的源代码 import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.TextField; import javafx.scene.input.MouseEvent; import javafx.stage.Stage; //from w ww . ja va 2 s . c o m public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 300, 250); TextField textBox = new TextField(); textBox.setPromptText("Write here"); // Register an event filter for a single node and a specific event type scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {...

JavaFX事件-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

JavaFX事件

JavaFX教程 – JavaFX事件 点击按钮通常会触发事件。例如,点击我们打印对话框上的打印按钮以将文档打印到打印机。UI库使用事件来通知已发生的事情。 对于每个事件,都会有关于源和目标控件的信息。 事件 JavaFX事件是javafx.event.Event类或其子类的一个实例。 JavaFX提供了几个事件,包括 ActionEvent InputEvent ScrollToEvent SortEvent MediaErrorEvent CheckBoxTreeItem.TreeModificationEvent TransformChangedEvent WindowEvent WorkerStateEvent WebEvent … … 您可以通过扩展 Event 类来定义自己的事件。 下表列出了事件的属性 属性 描述 type 发生的事件类型。 例如,鼠标事件。 Source 事件的起源。 Target 事件分派链中的最后一个节点。 事件类型 事件类型是EventType类的一个实例。例如,KeyEvent类包含以下事件类型: KEY_PRESSED KEY_RELEASED KEY_TYPED 事件周期 JavaFX事件传递过程包含以下步骤: Target selection Route construction Event capturing Event bubbling Target Selection setOn事件 我们可以使用setOnXXX方法来注册事件处理程序,格式如下: setOnEvent-type(EventHandler<? super event-class> value) 例如, aButton.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { System.out.println("Hello World"); } }); 事件类型是处理程序处理的事件的类型,例如,键入类型事件的setOnKeyTyped或setOnMouseClicked用于鼠标点击事件。 event-class 是定义事件类型的类,例如,与键盘输入相关的事件的KeyEvent或与鼠标输入相关的事件的MouseEvent。 以下代码显示如何处理键按下和释放键时的键入事件: setOnKeyTyped(EventHandler<? super KeyEvent> value) 下面的代码显示了如何处理按钮点击事件。setOnAction()方法用于注册事件处理程序。当用户单击按钮并打印时,将调用事件处理程序中的handle()方法“Hello World”到控制台。 import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; /*from w ww . j a va2s . c o m*/ public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public...

JavaFX手势事件-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

JavaFX手势事件

JavaFX教程 – JavaFX手势事件 JavaFX可以处理来自触摸使能设备的触摸和手势的事件。 手势和触摸事件 支持触摸启用设备的以下事件 手势 描述 Rotate Triggered when using two-finger to rotate objects. 它触发以下事件 ROTATION_STARTED ROTATE ROTATION_FINISHED Scroll Sliding movement. 如果鼠标滚轮用于滚动,则仅生成类型为SCROLL的事件。它触发以下事件: SCROLL_STARTED SCROLL SCROLL_FINISHED Swipe 在屏幕上扫描运动。 它触发以下事件: SWIPE_LEFT SWIPE_RIGHT SWIPE_UP SWIPE_DOWN Zoom 由双指缩放。它会启动以下事件: ZOOM_STARTED ZOOM ZOOM_FINISHED 手势事件示例 import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.input.MouseEvent; import javafx.scene.input.RotateEvent; import javafx.scene.input.ScrollEvent; import javafx.scene.input.SwipeEvent; import javafx.scene.input.TouchEvent; import javafx.scene.input.ZoomEvent; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; /* w w w.jav a 2 s . c o m*/ public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 300, 250); Rectangle rect = new Rectangle(); rect.setWidth(100); rect.setHeight(100); root.getChildren().add(rect); rect.setOnScroll(new EventHandler<ScrollEvent>() { @Override public...

JavaFX事件处理程序-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

JavaFX事件处理程序

JavaFX教程 – JavaFX事件处理程序 事件处理程序允许在事件冒泡阶段期间处理事件。 注册事件处理程序 事件处理程序是EventHandler接口的实现。要注册处理程序,请使用addEventHandler()方法。 scene.addEventHandler(DragEvent.DRAG_ENTERED, new EventHandler<DragEvent>() { public void handle(DragEvent e) { System.out.println("drag enter"); } }); 完整的源代码 import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.TextField; import javafx.scene.input.DragEvent; import javafx.stage.Stage; /*from w w w. j a v a2 s.com*/ public class Main extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage primaryStage) { Group root = new Group(); Scene scene = new Scene(root, 300, 250); TextField textBox = new TextField(); textBox.setPromptText("Write here"); // Register an event handler for a single node and a specific event type scene.addEventHandler(DragEvent.DRAG_ENTERED, new EventHandler<DragEvent>() { public void handle(DragEvent e) { System.out.println("drag enter"); } }); root.getChildren().add(textBox); primaryStage.setScene(scene); primaryStage.show(); } } 上面的代码生成以下结果。 重用事件处理程序 以下代码定义了一个事件处理程序对象并重用它添加事件处理程序。 // Define an...