54
Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Embed Size (px)

Citation preview

Page 1: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Lec 08 AgendaGo over examIntroduction to proFinal (Game Features)proBlackJack (Jerry and Alex to present)JavaFX Intro

Page 2: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

The game of BlackJack 21. Create a game of BlackJack. User plays against the computer which is the dealer.You must create a GUI application. This project provides an excellent opportunity to use your OO Analysis andDesign skills, as well as your Swing-GUI skills.

Here are the rules of blackjack: http://en.wikipedia.org/wiki/Blackjack

To keep things simple, you should use a 6-Deck shoe.No splitsNo insuranceUser starts with 1000$You must respect hard and soft aces (either 1 or 11)Dealer must hit on soft 17

There are many resource online where you can find png's or jpg's or cards.

Page 3: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Describe the system:

The game of BlackJack; a single player plays against the house for money. His bet is consistently $100.00 and he starts with 1,000.00. There is a shoe of six 52-card decks which is reshuffled when the shoe is half used. If the player wins the hand, his gets his bet back plus the amount of the bet. If he loses, he loses the money, and if he gets blackjack, he get's his bet * 1.5.

The player plays against a dealer who must follow the following strict rules; aces are worth 11points only, and the dealer must hit on 16 or below. The player however, is allowed to hit or hold on any hand-value. Furthermore, aces are worth either 1 or 11, whichever is more advantageous.

An initial two hands are dealt on seperate sides of a table consisting of two cards apiece. The dealer's hand displays only one card up. The player has the option to hit, hold, split, double-down, buy insurance, etc. For this initial version of the game, we'll consider only hit, hold, and deal.

blue are nouns (objects or fields)red are verbs (methods)

Page 4: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

4 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Page 5: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

5 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

LOGO

Presenting withJavaFX: Java's new Rich Client Platform

Page 6: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Java Pioneered Rich Client Applications

But developers had to learn multiple technologies

Page 7: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

7 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Ensemble – Collection of Examples

http://docs.oracle.com/javase/8/javafx/get-started-tutorial/

http://download.oracle.com/otndocs/products/javafx/2/samples/Ensemble/index.htmlVideos on JavaFXhttps://www.youtube.com/user/OracleLearning/search?

query=javafx

Tutorial and API Docs

http://docs.oracle.com/javase/8/javase-clienttechnologies.htm

Page 8: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX Simplifies Application Development

Developers Focus on Capabilities Instead of Technologies

Page 9: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

9 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Page 10: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

10 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Page 11: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX Runtime High Level Architecture

JavaFX Glossary• Glass Windowing Toolkit: Provides native operating services, such as managing

the windows, timers, and surfaces

• Prism: Graphics pipeline that can run on hardware and software renderers

• Quantum Toolkit: Ties Prism and Glass together and makes them available to the JavaFX APIs

• This is completey seemless in Java8

Page 12: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX 2.0 Scoreboard

Released on time (October 2011) ✔

All functionality exposed through Java APIs ✔

JavaFX and JavaScript/HTML5 interoperability ✔

High performance 2D and 3D graphics engine ✔

Designed to exploit modern advances in desktop and mobile ✔

Make JavaFX UI Controls available open source ✔

Complete and integrated development lifecycle experience

✔ Done In progress

Page 13: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Java APIs and FXML

Java APIs for JavaFX

• End-to-end Java development

• Java language features - generics, annotations, multi-threading

• Fluent API for UI construction

• Alternative JVM supported languages (e.g. Groovy, Scala) with JavaFX

• Leverage sophisticated Java IDEs, debuggers and profilers

• Java APIs preserve convenient JavaFX Script features (e.g., bind)

FXML

• Scriptable, XML-based markup language for defining UI

• Convenient alternative to developing UI programmatically in Java

• Easy to learn and intuitive for developers familiar with web technologies or other markup based UI technologies

• Powerful scripting feature allows embedding scripts within FXML. Any JVM scripting language can be used, including JavaScript, Groovy, and Scala

Page 14: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Graphics and Media

Media

• Stable media framework based on GStreamer

• VP6, MP3 playback of Web multimedia content

• Low latency audio

• Alpha channel support

• Performance improvements

• Full screen video

• New hardware accelerated graphics pipeline (Prism)

• New windowing toolkit (Glass) for Prism

• Java2D software pipeline under Prism

• High-level support for making rich graphics simple• Shadows, Blurs, Reflections, Effects,

2D transforms

• 3D Transforms today; Full 3D objects in future

New Graphics Pipeline

Page 15: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

WebView and Swing Interoperability

• Embed Web content in JavaFX applications

• HTML rendering based on Webkit

• Hardware accelerated rendering using PRISM

• DOM access and manipulation

WebView Component

• Embed JavaFX content into existing Swing applications

• Extend existing Swing applications with new JavaFX features such as WebView and high-performance graphics

• Applies to SWT applications as well

Swing and SWT Interop

• Faster loading of JavaFX Web applications based on Prism

• Pre-loader for improved user experience with JavaFX Web applications

Browser Plugin

Page 16: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Open Source and Standardization

• JavaFX source code being contributed as part of OpenJFXhttp://openjdk.java.net/projects/openjfx/– Source code being contributed in phases– Initial phase: UI Controls

• Oracle is committed to standardize JavaFX through JCP– One or more JSRs will be submitted– Expected to be become part of the Java SE specification

Page 17: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Distribution and Support

• JavaFX Distribution– JavaFX Runtime can now be distributed with third party

applications– Applies to JavaFX 2.0.2 and higher

• JavaFX Platform Commercial Support– JavaFX is now part of the Java SE technologies covered through

Oracle Premier Support– Applies to JavaFX 2.0.2 and higher

Page 18: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Let’s Compare: JavaFX 1.x

import javafx.application.*;import javafx.scene.shape.*;import javafx.scene.paint.*;

Stage { scene:Scene{ Content:[ Circle { centerX: 50 centerY: 50 radius: 50 fill: Color.RED } ] }}

Page 19: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Let’s Compare: JavaFX 2.0

public class JavaFXTest extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root,100,100); stage.setScene(scene); Circle c1 = new Circle(50.0f, 50.0f, 50.0f, Color.RED); root.getChildren().add(c1); stage.setVisible(true); }

public static void main(String a[]) { Launcher.launch(JavaFXTest.class, null); } }

Page 20: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Let’s Compare: FXML

<BorderPane> <center> <Circle radius=“50” centerX=“50” centerY=“50”/> </center></BorderPane>

public class JavaFXTest extends Application { @Override public void start(Stage stage) { stage.setTitle(“FXML Example”); Parent root = FXMLLoader.load(getClass().getResource(“example.fxml"), ResourceBundle.getBundle(“r.fxml_example")); stage.setScene(new Scene(root)); stage.show();

}}

Page 21: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Scene Graph

• Directed Acyclic Graph• Parents and children• Representation of the GUI components

Page 22: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

22 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Page 23: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Media

• JavaFX supports both visual and audio media• Cross-platform JavaFX media file format (fxm, mp3)

– Platform specific formats supported via native players

• Media class represents a media file• MediaPlayer provides control of the media rendering• MediaView uses MediaPlayer to render media as Node

– Many MediaViews can use the same MediaPlayer (cheaply)

Page 24: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Adding HTML Content

• WebEngine– Provides basic web page browsing functionality– Supports user interaction: navigating links, submitting forms

• WebView– Web page as a Node in scenegraph

• Effects can be applied

– Encapsulates WebEngine object– No plugin support

The Embedded Browser

Page 25: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Charts http://download.oracle.com/otndocs/products/javafx/2/samples/Ensemble/index.html

Page 26: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Effects...

GaussianBlur

InnerShadow

SepiaTone

Reflection

Page 27: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Transforms

rect.setTranslateX(40);rect.setTranslateY(10);

Rectangle rect=new Rectangle(0,0,60,60);rect.setFill(Color.DODGERBLUE);rect.setArcWidth(10);rect.setArcHeight(10);

rect.setRotate(45);

rect.setScaleX(2);rect.setScaleY(0.5);

Shear shear = new Shear(0.7, 0);rect.getTransforms().add(shear);

Page 28: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Binding

• Creates a dependency between a property and a changeable value

• High level API– Easy to use– Covers most common situations

• Low level API– Allows for more complex interactions– Optimised for fast execution and small footprint

Page 29: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Properties

• Basis for high level binding API• Concrete types for all primitives, String and Object

– DoubleProperty, StringProperty, etc

• Simple API– bind / unbind– bindBidirectional / unbindBidirectional– isBound

Page 30: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Simple Binding Example

private SimpleDoubleProperty topXProperty = new SimpleDoubleProperty();private SimpleDoubleProperty topYProperty = new SimpleDoubleProperty();

Line foldLine = new Line();foldLine.setEndX(200);foldLine.setEndY(200);foldLine.startXProperty().bind(topXProperty);foldLine.startYProperty().bind(topYProperty);

...

topXProperty.set(tx);topYProperty.set(ty);

Page 31: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Timeline Based Animations

• Timeline– Modifies values of variables specified in KeyFrames

• KeyFrame: specifies that a variable should have– A particular value at a particular time

• KeyValue: Value to be interpolated for an interval

Page 32: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Animated Transitions

• Pre-defined, single-purpose animations– Fade, Path, Pause, Rotate, Scale, Translate– Can specify to, from and by values

• Container transitions– Parallel, sequential– Can be nested arbitarily

• Transitions and Timelines share ancestary– A Timeline can be added to a Parallel / Sequential transition

Page 33: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Standard Java Tools for Easy Development

• Source editor with improved syntactic highlighting, code completion, refactoring etc.

• Full debugger and profiler support

• Project wizard for easy creation of JavaFX applications

Other Java IDEs• Source editor with syntactic highlighting,

code completion, refactoring etc.• Full debugger and Profiler support

Page 34: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX Scene Builder for Rapid UI Design

• WYSIWYG GUI design tool for the JavaFX platform

• Enables designing user interface screens by simply dragging and positioning GUI components from a palette onto a scene

• Generates files in FXML format that can be used within a project in any IDE such as NetBeans or Eclipse

• Can be used to create GUI for desktop and Web applications

• Currently in Early Access (by invitation)

Page 35: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX Future Directions

• Tighter Integration with Java SE• Migration Path for Java Client UI Technologies• Optimized Web Services Support• Advanced Tooling• Support for Modern Device Interactions• Delivering on the Cross Platform Promise

Oracle’s Next Generation Java Client Solution

Page 36: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX is …

• Cross platform: Windows GA, Mac & Linux Dev. Preview• Familiar: 100% Java APIs• Powerful: leverages underlying Java platform• Modern: CSS skinning, HW acceleration, Webkit• Backwards ‘compatible’: Swing & SWT interoperability• Flexible: applicable to embedded, tablets and mobile• Open Source: http://openjdk.java.net/projects/openjfx

Page 37: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

JavaFX RoadmapJavaFX 3.0•Included in JDK 8•Concurrent OS support(Windows, Mac OS, Linux)

JavaFX 3.0•Included in JDK 8•Concurrent OS support(Windows, Mac OS, Linux)

JavaFXScene Builder GA

JavaFXScene Builder GA

NetBeans•JavaFX 3.0 Support

NetBeans•JavaFX 3.0 Support

JavaFX 2.2•Linux GA

JavaFX 2.2•Linux GA

JavaFX 2.1•Mac OS X GA•Linux Dev. Preview

JavaFX 2.1•Mac OS X GA•Linux Dev. Preview

20112011 20122012 20132013 20142014

JavaFXScene Builder EA

JavaFXScene Builder EA

JavaFX 2.0•Windows GA•Mac OS X Dev. Preview

JavaFX 2.0•Windows GA•Mac OS X Dev. Preview

NetBeans 7.1•JavaFX 2.0 Support

NetBeans 7.1•JavaFX 2.0 Support

JavaFX 2.0.2•JDK 7 co-install

JavaFX 2.0.2•JDK 7 co-install

Page 38: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Resources

• JavaFX website: http://javafx.com

• Open source project http://openjdk.java.net/projects/openjfx/

• Oracle Premier Support for Softwarehttp://www.oracle.com/us/support/software/premier/

• Blogs– http://fxexperience.com– http://blogs.oracle.com/javafx

• Twitter: @javafx4you

Page 39: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 40: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

40 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Group effects and transforms to be applied to a collection of child nodes. Will not resizeRegion class for nodes that can be styled with CSS and layout children. Will resize autoControl class for high-level skinnable nodes designed for user interaction.

TabSample project

Parent(abstract)

Group Region Control

Node

Page 41: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

41 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Binding one GUI component to anotherbtn.prefWidthProperty().bind(scene.widthProperty()); (TabsSample)

Binding GUI component to Worker (TimesControllerTask)lblStatus.textProperty().bind(getReviewsTask.messageProperty()); btnGo.disableProperty().bind(getReviewsTask.runningProperty()); lstView.itemsProperty().bind(getReviewsTask.valueProperty());

Define your own Thread-Safe properties and listen for changes (ThreadsController) service.getCounterProperty().addListener(new ChangeListener(){ @Override public void changed(ObservableValue o,Object oldVal, Object newVal){ System.out.println("Counter changed to: " + service.getCounter()); } });

Bindings

Page 42: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

42 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Threads.fxml")); Parent root = (Parent) loader.load(); ThreadsController controller = loader.getController(); controller.setStage(primaryStage);

In YourController, you need this method: public void setStage(Stage stage) { this.primaryStage = stage; }

Communicate between Main and Controller

Page 43: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

43 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

The javafx.concurrent package consists of the Worker interface and two concrete implementations, Task and Service classes.

The Worker interface provides APIs that are useful for a background worker to communicate with the UI.

The Task class is a fully observable implementation of the java.util.concurrent.FutureTask class. The Task class enables developers to implement asynchronous tasks in JavaFX applications. The Task class defines a one-time object that cannot be reused.

The Service class executes tasks. If you need a reusable Worker object, use the Service class.

Concurrency in javaFX

Page 44: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

44 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Group effects and transforms to be applied to a collection of child nodes.Region class for nodes that can be styled with CSS and layout children.Control class for high-level skinnable nodes designed for user interaction.

Task Service

Worker(Interface)

Page 45: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

45 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 8

Inside the call method, you can use:

updateProgress(), updateMessage() , updateTitle() methods, which update the values of the corresponding properties on the JavaFX Application thread.

Page 46: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Web Services

http://www.programmableweb.com/http://www.faroo.com/http://www.faroo.com/hp/api/api.htmlhttp://www.faroo.com/api?q=iphone&start=1&length=10&l=en&src=web&f=jsonhttp://jsonviewer.stack.hu/

Page 47: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

What is JavaFX?It’s a language for creating graphical user

interfaces...

Page 48: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

What is JavaFX?It’s a language for creating graphical user

interfaces...

Page 49: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro
Page 50: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro
Page 51: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Regions: Slider

Page 52: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

So, who wants to learn more?

Page 53: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

Public/private constants lec08.blackjack.Card. Store as little as possible in an instance.polymorphism lec03.simplepoly

Page 54: Lec 08 Agenda Go over exam Introduction to proFinal (Game Features) proBlackJack (Jerry and Alex to present) JavaFX Intro

how to inspect a class' hierarchy cntrl-H, cntrl-shift-alt-u Reflection lab08.reflectionusing the debugger lec08 debuggerrecursion and videos