Question

Comment implémenter un panneau qui prendrait en charge le retour à la ligne et le saut de ligne? J'ajouterais seulement des étiquettes textuelles et des sauts de ligne à ce panneau. Les étiquettes doivent défiler de gauche à droite, en passant à la & "Ligne &"; si nécessaire. Les sauts de ligne provoqueraient un saut à la ligne suivante. Je souhaite également faire défiler le panneau verticalement.

La solution devrait fonctionner en Java 5. SwingX peut être utilisé.

Clarification: les étiquettes textuelles sont en réalité JXHyperlink s (de SwingX), c'est-à-dire que le panneau contient des étiquettes cliquables. C’est la raison pour laquelle je ne peux pas simplement utiliser JTextArea.

Était-ce utile?

La solution 3

J'ai trouvé JTextPane, ce que j'avais négligé auparavant pour une raison quelconque. Cette classe fait ce dont j'ai besoin.

Merci pour votre aide cependant. :)

Autres conseils

UPDATE: J'ai raté la demande de support des hyperliens. Je ne sais pas comment faire cela sans utiliser le EditorPane.

JTextArea fait exactement ce que vous avez décrit.

JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);

texte de remplacement http://img187.imageshack.us/img187/3238/wraprn0 .png

Cet exemple ne provient pas d'un panneau, c'est-à-dire d'un conteneur, mais d'un JLabel destiné à afficher du contenu.

Vous pouvez utiliser HTML dans votre contenu et utiliser un < br > à chaque pause. Vous devez calculer par programme les coupures en fonction de vos règles de redimensionnement des composants.

Voici le code:

import javax.swing.*;
import java.awt.*;

public class Wrap {


    public static void main( String [] args ) { 

        JFrame frame = new JFrame("Wrap test");

        String text =  "<html>This<br>is<br>a<br>multiline<br>label</html>";


        frame.add( new JLabel( text ) );

        frame.pack();

        frame.setVisible( true );

    }
}

Même si ce n’est peut-être pas la solution que vous recherchez, mais compte tenu de vos exigences, il semble qu’une coutume LayoutManager puisse vous permettre d’atteindre ce que vous cherchez. En concevant et en affectant un gestionnaire de disposition personnalisé permettant les sauts de ligne à un Container (tel que Panel ), il devrait être possible d'avoir un FlowLayout qui autorise les sauts de ligne.

Disposition des composants dans un conteneur article de Les didacticiels Java fournissent des informations générales sur le fonctionnement des gestionnaires de disposition en Java, et en particulier, le Création d'un gestionnaire de mise en forme personnalisé fournira des informations sur la création d'un gestionnaire de disposition personnalisé à appliquer à un Component.

Le comportement du add() (le gestionnaire de disposition par défaut pour LineBreakLayout.LINE_BREAK) semble assez proche du comportement que vous pouvez être après. L’ajout de fonctionnalités au saut de ligne semble être la pièce manquante.

Suggestion: Le gestionnaire de disposition personnalisé peut peut-être ajouter un saut de ligne en ayant un LineBreakLayout représentant un saut de ligne, qui peut être ajouté à un Label en utilisant le <=> méthode.

Par exemple, avoir une constante de classe <=> dans le gestionnaire de présentation personnalisé, telle que (hypothétique) <=>, et l'ajouter à <=> peut indiquer au gestionnaire de présentation personnalisé de passer à la ligne suivante. Peut-être qu'une implémentation peut ressembler à:

Panel p = new Panel(new LineBreakLayout());
p.add(new Label("First Line"));
p.add(LineBreakLayout.LINE_BREAK);
p.add(new Label("Second Line"));

Le hypothétique ci-dessus <=> ci-dessus rendra le premier <=> d'une ligne et le second <=> de la deuxième ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top