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教程中的脚本 – 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中的脚本 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教程 – 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教程 – 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...