IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Tableview et HTML en client riche


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Tableview et HTML en client riche
    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

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    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++

  3. #3
    Invité
    Invité(e)
    Par défaut
    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

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    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++

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    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 :

    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);
         }
      }
    }));
    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.
    Merci de penser au tag quand 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

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    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);
        }
    }
    Nom : TestTableViewWebView.jpg
Affichages : 131
Taille : 19,7 Ko

    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 tag quand 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

Discussions similaires

  1. Execution d'un client riche pour EJB
    Par pedouille dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 04/11/2006, 18h30
  2. [RCP] Initialisation Spring Client Riche
    Par tatemilio2 dans le forum Spring
    Réponses: 1
    Dernier message: 19/09/2006, 08h52
  3. Client lourd - client lerger - client riche
    Par xtiand4 dans le forum Développement
    Réponses: 3
    Dernier message: 06/07/2006, 00h09
  4. [Architecture] appli en intranet avec client riche
    Par nma dans le forum Développement Web en Java
    Réponses: 18
    Dernier message: 22/01/2006, 15h16
  5. [swing] swing et le client riche facile (JDNC)
    Par sse dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/12/2005, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo