Bonjour,
Est-il possible d'afficher du texte HTML ou RTF dans une table en Java (pour un développement client riche) ?
Merci. Cordialement. Gilles
Bonjour,
Est-il possible d'afficher du texte HTML ou RTF dans une table en Java (pour un développement client riche) ?
Merci. Cordialement. Gilles
Salut,
Swing supporte l'HTML 4, via les JTextPane/JEditorPane.
Toutefois c'est vraiment basique en comparaison des navigateurs modernes.
Sinon il y a la solution WebView de JavaFX dans Java 8 : http://docs.oracle.com/javafx/2/swin...y.htm#CHDIEEJE
a++
Bonjour,
merci pour votre réponse. Mais je ne crois pas que cela soit ce que je cherche. Dans mes bases de données, certains champs sont des blobs qui contiennent soit du html soit du rtf (encodés d'ailleurs en base 64). Ce sont des textes "peu" enrichis (couleur, fond, éventuellement polices, tailles, puces, le tout sans images). Je peux les afficher (je ne cherche pas à faire autre chose) dans des grilles (ou tables suivant le langage) avec Windev ou avec Qt 5. Je me demandais s'il était possible d'en faire autant avec Java.
Je ne suis pas un grand connaisseur de Java d'une manière générale et encore moins en client riche. Je n'utilise Java qu'avec Androïd Studio (java 7)... et c'est à cette occasion que j'ai découvert "un" Java... très sympathique d'ailleurs. Je voudrais simplement savoir si -en client riche- c'est faisable ou non... et comment ?
Cordialement. Gilles
Tu veux dire quoi exactement par "client riche" ? Car la notion est vague et peut englober plusieurs technos.
Bref quels techno tu utilises exactement ?
En Swing tu peux afficher de l'HTML4. Si tes bouts d'HTML ne sont pas trop compliqué cela pourrait amplement suffire.
Et apparemment il y a un kit RTF, donc cela devrait également être possible : http://docs.oracle.com/javase/7/docs...EditorKit.html
En JavaFX par contre je n'en ai aucune idée.
a++
La réponse est donnée sur StackOverFlow : il faut créer une fabrique a cellule qui intègre un WebView en tant que graphic de la cellule.
Quelque chose dans le genre :
Par contre, il faudra faire des tests pour vérifier si le problème indiqué concernant la taille des cellules se pose ou pas ou si ça a été corrigé depuis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 TableView<String> tableView = ... tableView.getColumns().forEach(tableColum -> tableColum .setCellFactory(tv -> return new TableCell<String, String>() { private final WebView webView = new WebView(); @Override public void updateItem(String value, boolean empty) { super.updateItem(value, empty); setText(null); Node graphic = null; if (!empty && value != null) { webView.getEngine().loadContent(value); graphic = webView; } setGraphic(graphic); } } }));
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Effectivement, par défaut la taille semble un peu space, mais ils semble être possible de la corriger sans trop de difficulté (du moins dans le test) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 public class Main extends Application { @Override public void start(Stage primaryStage) { final int columnNumber = 3; final int rowNumber = 3; final TableView<String> tableView = new TableView<>(); tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); for (int columnIndex = 0; columnIndex < columnNumber; columnIndex++) { final TableColumn<String, String> tableColumn = new TableColumn<>("Column " + (columnIndex + 1)); tableColumn.setCellValueFactory(cellDataFeature -> { final String value = cellDataFeature.getValue(); return new SimpleStringProperty(value); }); tableColumn.setCellFactory(tv -> new TableCell<String, String>() { private final WebView webView = new WebView(); { setPadding(Insets.EMPTY); webView.setPrefHeight(USE_COMPUTED_SIZE); webView.setPrefWidth(Double.MAX_VALUE); } @Override public void updateItem(String value, boolean empty) { super.updateItem(value, empty); setText(null); Node graphic = null; if (!empty && value != null) { final int columnIndex = getTableView().getColumns().indexOf(getTableColumn()); final int rowIndex = getIndex(); final int red = (int) Math.floor(255d * rowIndex / (double) rowNumber); final int green = (int) Math.floor(255d * columnIndex / (double) columnNumber); final String color = String.format("#%02X%02XFF", red, green); final String cellValue = String.format(value, color); webView.getEngine().loadContent(cellValue); graphic = webView; } setGraphic(graphic); } }); tableView.getColumns().add(tableColumn); } for (int rowIndex = 0; rowIndex < rowNumber; rowIndex++) { String htmlBit = "<html>\n" + "</head>\n" + " <style type=\"text/css\">\n" + " body{\n" + " background-color:%s;" + " margin: 0;\n" + " padding: 0\n" + " }\n" + " </style>\n" + "</head>\n" + "<body>\n" + "Hello World!\n" + "</body>\n" + "</html>"; tableView.getItems().add(htmlBit); } final StackPane root = new StackPane(); root.getChildren().add(tableView); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Test"); primaryStage.setScene(scene); primaryStage.show(); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } }
Tout n'est pas parfait 100% du temps ceci dit car parfois, au lancement, le WebView s’étale sur deux lignes et fait apparaitre sa barre de scroll. Légèrement redimensionner la fenêtre suffit a faire que l'affichage redevienne correct.
Pour des labels qui s’étalent sur plus d'une ligne il faudra probablement fournir une hauteur par défaut.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Partager