Some time ago, he has opened Official JavaFX Feedback Forum to ask us what we are suggesting for JavaFX.
with the status planned and the comment
"We are adding a lot more UI controls for the next release. Please stay tuned "
| Main.fx |
package javafxjpa2searchtextbox; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.text.Text; import javafx.scene.text.Font; import customcomponent.SearchTextBox; import javafx.scene.control.ListView; import paddy.domain.Music; import paddy.service.MusicServices; /** * @author Patrick */ var listMusic; var seqMusic:Music[]; var musicServices:MusicServices = MusicServices{}; Stage { title: "Application title" width: 600 height: 250 scene: Scene { stylesheets : ["{__DIR__}resources/mac.css"] content: [ Text { font: Font { size: 16 } x: 10 y: 30 content: "Search DB" } SearchTextBox { translateX: 10 translateY: 40 onResetSearch: function () { println("reset !"); delete seqMusic; } onSearch: function (s: String) { println("Search of : {s}"); listMusic = musicServices.getArtisteNameBeginingBy(s); delete seqMusic; seqMusic = listMusic.toArray(seqMusic); } } ListView { layoutY: 75 width: 575 height: 100 items: bind seqMusic } ] } }
Query query = em.createQuery("select m from Music m where m.artisteName like :param"); query.setParameter("param", param); List<Music> musics = query.getResultList();
@NamedQueries({
@NamedQuery(name = "findAllAlbum", query= "select m from Music m"),
@NamedQuery(name = "findAllAlbumWhereArtisteLike",query="select m from Music m where m.artisteName like :param")
})Query query = em.createNamedQuery("findAllAlbumWhereArtisteLike"); query.setParameter("param", param); List<Music> musics = query.getResultList();
| MusicServices.java |
package paddy.service; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import paddy.domain.Music; /** * * @author Patrick */ public class MusicServices { EntityManagerFactory emf; EntityManager em; public MusicServices(){ emf = Persistence.createEntityManagerFactory("MusicAndLight"); em = emf.createEntityManager(); } public List<Music> findAll(){ Query query = em.createNamedQuery("findAllAlbum"); List<Music> musics = query.getResultList(); return musics; } public List<Music> getArtisteNameBeginningBy(String begining){ String param = begining+"%"; CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Music> query = cb.createQuery(Music.class); Root<Music> music = query.from(Music.class); query.where(cb.like(music.<String>get("artisteName"), param)); List<Music> musics = em.createQuery(query).getResultList(); return musics; } @Override protected void finalize() throws Throwable { try { em.close(); emf.close(); } finally { super.finalize(); } } }
| Main.fx |
package javafxjpa2basic; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.ListView; import javafx.scene.control.Button; import paddy.domain.Music; import paddy.service.MusicServices; /** * @author Patrick */ var listMusic; var seqMusic:Music[]; var musicServices:MusicServices = MusicServices{}; Stage { title: "Application title" scene: Scene { width: 600 height: 175 content: [ Button { text: "Find all the musics" action: function() { delete seqMusic; listMusic = musicServices.findAll(); seqMusic = listMusic.toArray(seqMusic); println("seqMusic: {seqMusic} "); } } ListView { layoutY : 50 width: 575 height : 100 items: bind seqMusic } ] } }
| Music.java |
package paddy.domain; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.NamedQuery; /** * * @author Patrick */ @Entity @NamedQuery(name = "findAllAlbum", query= "select m from Music m") public class Music implements Serializable { @Id @GeneratedValue private Long id; @Column(name = "artist_name") private String artisteName; @Column(name = "album_title") private String albumTitle; public Music() { } ... Getter and setter ... @Override public String toString(){ StringBuffer sb = new StringBuffer(); sb.append("id : ");sb.append(id);sb.append(" ; "); sb.append("artisteName : ");sb.append(artisteName);sb.append(" ; "); sb.append("albumTitle : ");sb.append(albumTitle); sb.append(" \n"); return sb.toString(); } }
| META-INF\persistence.xml |
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="MusicAndLight" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>paddy.domain.Music</class> <properties> <property name="eclipselink.target-database" value="DERBY"/> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/javafxDB"/> <property name="javax.persistence.jdbc.user" value="APP"/> <property name="javax.persistence.jdbc.password" value="paddy"/> </properties> </persistence-unit> </persistence>
| namedQuery |
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MusicAndLight"); EntityManager em = emf.createEntityManager(); //get and create the namedQuery findAllBum Query query = em.createNamedQuery("findAllAlbum"); //execute the query List<Music> musics = query.getResultList(); for (Music music : musics){ System.out.println(music); } em.close(); emf.close();
| Criteria Api |
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MusicAndLight"); EntityManager em = emf.createEntityManager(); String param = "Arc%"; CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Music> query2 = cb.createQuery(Music.class); //select * from Music Root<Music> music2 = query2.from(Music.class); //where artisteName like param //in my example where artisteName like Arc% (begining by Arc) query2.where(cb.like(music2.<String>get("artisteName"), param)); //execute the query List<Music> musics2 = em.createQuery(query2).getResultList(); for (Music music : musics2){ System.out.println(music); } em.close(); emf.close();
Bonne Année ! , Happy New Year !
For beginning this New Year, I added a sinusoidal effect to my scroll.
To do that, I added a DisplacementMap effect to the scroll line.
DisplacementMap Effect
effect: DisplacementMap { mapData: map
input:Reflection {
fraction: 0.75
topOffset: 0.0
topOpacity: 0.5
bottomOpacity: 0.0
}
}
And I created a FloatMap to make the sinusoidal effect
FloatMap
var widthScroll = letterWidth * 10; // 10 chars
var map = FloatMap { width: widthScroll height: letterHeight }
for (i:Integer in [0..<widthScroll]) {
var v = (Math.sin(i/35.0*Math.PI)-0.5)/30.0;
for (j:Integer in [0..<letterHeight]) {
map.setSamples(i, j, 0.0, v);
}
}
As you see in the code, the DisplacementMap effect take a FloatMap as parameter. And each individual entry in the FloatMap contains per-pixel offset information in the x and y direction.
For example if you have this image
My FloatMap contains offsets x and y to have