FX Experience Has Gone Read-Only

I've been maintaining FX Experience for a really long time now, and I love hearing from people who enjoy my weekly links roundup. One thing I've noticed recently is that maintaining two sites (FX Experience and JonathanGiles.net) takes more time than ideal, and splits the audience up. Therefore, FX Experience will become read-only for new blog posts, but weekly posts will continue to be published on JonathanGiles.net. If you follow @FXExperience on Twitter, I suggest you also follow @JonathanGiles. This is not the end - just a consolidation of my online presence to make my life a little easier!

tl;dr: Follow me on Twitter and check for the latest news on JonathanGiles.net.

Announcing Scenic View 8.0.0 Developer Preview 2

Today I’m pleased to make available an updated Scenic View 8.0.0 release (that is, the version of Scenic View targeted at JavaFX 8.x). This release is mainly to keep Scenic View working with the latest JavaFX 8.0 APIs. In addition a number of bugs have been resolved to make Scenic View slightly more usable (but there is still a lot broken and / or disabled). If you are still having trouble getting Scenic View to start and find any JavaFX applications please leave a comment and help me out – the next developer preview release is intended to focus on improving this aspect of Scenic View (I have built all the scaffolding to improve things but not yet implemented much of it).

For those unfamiliar with Scenic View, it can best be described thusly: Scenic View is a JavaFX application designed to make it simple to understand the current state of your application scenegraph, and to also easily manipulate properties of the scenegraph without having to keep editing your code. This lets you find bugs, and get things pixel perfect without having to do the compile-check-compile dance.

As always, further information and download links can be found on the Scenic View page.

Interview with Felipe Heidrich

Interview with Felipe Heidrich

As I promised last week in my interview with Tom Schindl, today I have an interview with Felipe Heidrich. Felipe is an Oracle employee responsible for a number of things in the JavaFX area, but the reason why I wanted to interview Felipe is because his work is what enabled Tom to create the styled text editor he announced last week. I’ll leave it to Felipe to introduce himself, so without further ado, let’s get into it! Enjoy 🙂

Hi Felipe – could you please introduce yourself?Felipe Heidrich
My name is Felipe Heidrich, I was born and raised in Brazil. After receiving my Bachelor degree in CS from the Federal University of Santa Catarina I moved to Ottawa, Canada for an internship position with Object Technology International (OTI). The following year OTI was fully integrated by IBM Canada where I worked for the next 10 years.

In 2012, I decided it was time for a new adventure (and better weather) so I moved to Santa Clara, California to work for Oracle on the JavaFX project.

Before joining Oracle you had a lot to do with Eclipse – can you clarify what exactly you did there?
I worked on the Eclipse Platform for over 10 years. More specifically on the Standard Widget Toolkit (SWT) where I had the opportunity to work on virtually everything it takes to build a widget toolkit, from accessibility to input methods to printing. My areas of responsibility also included the StyledText and everything related to it. In my last year there I worked on the Orion project where I was responsible for designing  and implementing the text editor component. We had a great team in Ottawa and an amazing community around Eclipse and Orion, it was a great run.

You’ve been at Oracle for around a year now. What have you done during this time?
I’m currently working in the graphics team. I spend most of my time working with text. Our first challenge was to add unicode support and after that it was to design and implement rich text support. Being at the bottom of the stack I get to interact with nearly all other parts of the system and I always try to contribute and participate in the entire product.

(more…)

JavaFX links of the week, February 24

Hi everyone, and welcome to another weekly links roundup. This weeks post is a day early as I’ll be out of town when I usually post. Anyway, enjoy! 🙂

  • Tom Schindl continues his work on styled text rendering in JavaFX, going so far as to improve performance by 100x, and then developing a styled text editor using a combination of the new rich text support in JavaFX 8.0 and the ListView control.
  • Speaking of Tom, you can find out more about what Tom has been up to with rich text in JavaFX in an interview I posted with him.
  • John Hendrix has posted a YouTube video of a JavaFX Carousel control that interestingly is simply a new skin for the TreeView control that ships with JavaFX. I’d be interested in seeing the source code for this!
  • Jarek Sacha wrote to let me know that ScalaFX 1.0 Milestone 1 has been released. As he puts it, “ScalaFX helps you simplify creation of JavaFX-based user interfaces in Scala. ScalaFX uses a simple, hierarchical pattern for creating new objects and building up the scene graph. ScalaFX supports full interoperability with Java and can run anywhere the Java Virtual Machine (JVM) and JavaFX2 are supported. Current version supports most of the JavaFX 2.2.* functionality. For more information see ScalaFX home page.”
  • Elisabeth Engel has posted on how to present Spring Data Neo4j Nodes in a JavaFX TableView.
  • JacpFX, the RCP framework on top of JavaFX and Spring has reached version 1.2. This release is mainly a bugfix release and improves stability and overall performance.
  • Jens Deters has updated his blog posts on how to use the ‘Font Awesome’ font in JavaFX. You can find read his earlier post for further context.
  • Anton Epple has posted about he has written a Space Invaders clone in JavaFX using his fx2d library (and 175 additional lines of code).
  • Arnaud Nouard has posted part two of his series on the Undecorator library he is developing, this time focusing on ease of integration with your application.
  • Andy Till continues to develop his EstiMate application, this week releasing version 0.0.2. As he puts it, “EstiMate is not a project management tool, it is firmly aimed at software engineers and developers who need to provided accurate estimates for tasks to be performed by themselves and their team.”
  • Farrukh Obaid has posted a video of a new CSS theme he has been working on for JavaFX. It looks good, but now I’m keen to see the code. Hopefully it is made available sometime soon (if it isn’t already).

That’s us for another week. Catch you again in a weeks time! Keep up the great work folks! 🙂

Interview with Tom Schindl

Interview with Tom Schindl

Hi everyone. I’ve been meaning to get more interviews out for quite some time, but as you know work is often all-consuming! 🙂 Anyway, today I am pleased to post this catch-up with Tom Schindl about his work on a styled text editor for JavaFX. Next week I will be following this interview up with another interview, this time with Felipe Heidrich, an Oracle engineer who works on text in JavaFX (including the rich text APIs Tom mentioned below and native text rendering). Previously he was very closely involved with Eclipse and SWT, so he has a wealth of knowledge in the Java desktop area. Anyway, for today let’s get back to Tom! Enjoy 🙂

Hi Tom, I’ve already interviewed you in the past, but today I wanted to talk to you about your latest work around styled text editing in JavaFX. Could you please summarise what exactly it is you’ve been working on?
In the last week I’ve been working on a StyledTextArea (Blog 1, Blog 2, Blog 3). Developers interact with such a control day by day when using their favorite IDE – in my case Eclipse.

If someone one day wants to write a purely JavaFX driven IDE, the source code editor is certainly the most important control. In JavaFX 2 it was very hard to implement a control like this and the only feasible solution was to use WebView and use one of the sourcecode editors written in JavaScript. And as a matter of fact, one can really get quite far with it (See my blog entry about mixing and matching JDT and JavaFX).

JavaFX 8 introduces a new scenegraph element named “TextFlow” that helps with the layout of Text nodes and so writing such a control has become much easier than it was in JavaFX 2.x. One of my main goals is to have a control that has an API comparable to the widget used within Eclipse. The reason for that is that if the widget works similar to the SWT one,  almost everything provided by the Eclipse text parsing and styling infrastructure can be reused almost unmodified (only replace things like SWT-Color, Font by their JavaFX counterparts and you are done).

(more…)

JavaFX 3D Early Access Available

JavaFX 3D Early Access Available

If you came to JavaOne 2012 or watched they keynote online you would have seen a cool proof of concept we did along with Canoo and Navis. In case you missed it, its on YouTube:

It was built on a early JavaFX prototype with added 3D mesh, Camera and Lighting support. The first public build of JavaFX 8 with the official support for this is now out for you to download, yay!

Download Java 8 EA b77 (including 3D) …

At the moment there is only support for Windows but a OpenGL version for other platforms is being worked on.

For a list of 3D features that are being worked on then check out the Open JFX wiki:
wikis.oracle.com – OpenJDK – 3D Features

Here is a very simple example to help you get started:

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.*;
import javafx.stage.Stage;

public class Shapes3DViewer extends Application {
    @Override public void start(Stage stage) {
        PhongMaterial material = new PhongMaterial();
        material.setDiffuseColor(Color.LIGHTGRAY);
        material.setSpecularColor(Color.rgb(30, 30, 30));

        Shape3D[] meshView = new Shape3D[] {
            new Box(200, 200, 200),
            new Sphere(100),
            new Cylinder(100, 200),
        };

        for (int i=0; i!=3; ++i) {
            meshView[i].setMaterial(material);
            meshView[i].setTranslateX((i + 1) * 220);
            meshView[i].setTranslateY(500);
            meshView[i].setTranslateZ(20);
            meshView[i].setDrawMode(DrawMode.FILL);
            meshView[i].setCullFace(CullFace.BACK);
        };

        PointLight pointLight = new PointLight(Color.ANTIQUEWHITE);
        pointLight.setTranslateX(800);
        pointLight.setTranslateY(-100);
        pointLight.setTranslateZ(-1000);

        Group root = new Group(meshView);
        root.getChildren().add(pointLight);
        
        Scene scene = new Scene(root, 800, 800, true);
        scene.setFill(Color.rgb(10, 10, 40));
        scene.setCamera(new PerspectiveCamera(false));
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Simple 3d Example App

I can’t wait to see what sort of cool things you guys will be able to do with it 🙂