Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : caret perso [ Multimédia / Autre ] (3615jenveux)

mercredi 13 février 2008 à 17:07:55 | caret perso

3615jenveux

Bonjour,

Je cherche a écrire un Caret de sélection de texte perso pour un JTextComponent. Cela fonctionne, mais j'ai du mal implémenter ma classe, car la couleur de texte sélectionné est ignorée, c'est à dire que le texte sélectionné n'est pas peind avec la couleur definit par :

monTextComponent.setSelectedTextColor(maCouleur);

Quelqu'un pourrait-il m'aider ou me suggérer une piste car je patauge, et je rame tant que j'attaque la falaise :)

Sur l'exemple ci-dessous le texte de couleur noir ou rouge reste noir ou rouge, alors qu'il devrait normalement s'afficher en orange !
Voici mon code :

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
import javax.swing.plaf.TextUI;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultCaret;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
import javax.swing.text.View;
import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter;



@SuppressWarnings("serial")
public class ExtendedCaretSelection extends DefaultCaret {

    private Highlighter.HighlightPainter caretPainter = new CaretPainter();
    private Color defaultColor = Color.GRAY;
   
    public ExtendedCaretSelection() {
        super();
    }

   
   
   
    @Override
    protected Highlighter.HighlightPainter getSelectionPainter() {
        return caretPainter;
    }
   


    public class CaretPainter extends DefaultHighlightPainter {

        public CaretPainter() {
            super(defaultColor);
        }
       


        @Override
        public Shape paintLayer(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view) {
            Rectangle alloc = bounds.getBounds();
            try {
                // --- determine locations ---
                TextUI mapper = c.getUI();
                Rectangle p0 = mapper.modelToView(c, offs0);
                Rectangle p1 = mapper.modelToView(c, offs1);

                // --- render ---
                Color color = c.getSelectionColor();
                c.getSelectedTextColor();

                if (color == null) {
                    g.setColor(defaultColor);
                }
                else {
                    g.setColor(color);
                }
                if (p0.y == p1.y) {
                    // same line, render a rectangle
                    Rectangle r = p0.union(p1);
                    g.fillRect(r.x, r.y, r.width, r.height);
                    return r;
                }
                else {
                    // different lines
                    alloc.width = c.getWidth();
                    int p0ToMarginWidth = alloc.x + alloc.width - p0.x;
                    g.fillRect(p0.x, p0.y, p0ToMarginWidth, p0.height);
                    if ((p0.y + p0.height) != p1.y) {
                        g.fillRect(alloc.x, p0.y + p0.height, alloc.width, p1.y
                                - (p0.y + p0.height));
                    }
                    g.fillRect(alloc.x, p1.y, (p1.x - alloc.x), p1.height);
                    c.repaint();
                    return alloc;
                }
            }
            catch (BadLocationException e) {
                // can't render
            }
            return null;
        }
       
    }
   
}


-----------------------------------------------------------------------------

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

public class Go2 {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextPane editor = new JTextPane();
        ExtendedCaretSelection caret = new ExtendedCaretSelection();
        editor.setCaret(caret);
        editor.setSelectionColor(Color.YELLOW);
        editor.setSelectedTextColor(Color.ORANGE);
       
        frame.setContentPane(editor);
        frame.setVisible(true);
           
        editor.setText("\taaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa " +
                "bbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbbbbbbbbbbbbb.\n" +
                "ccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccc.\n" +
                "ddddddddddddddddddddddddddd dddddddddddddd.\n" +
                "eeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeee eeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeee " +
                "eeeeeeeeeeeeeeeeeeee eeeeeeeeeeeee eeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeeeeeee.");
            StyledDocument doc = editor.getStyledDocument();
            Style baseStyle = doc.addStyle("base", null);
            StyleConstants.setFontFamily(baseStyle, "Lucida Sans Unicode");
            StyleConstants.setFontSize(baseStyle, 18);
            StyleConstants.setLeftIndent(baseStyle, 10f);

            Style red = doc.addStyle("red", baseStyle);
            StyleConstants.setForeground(red, Color.red);
            StyleConstants.setBackground(red, Color.CYAN);
           
            doc.setCharacterAttributes(22, 10, red, false);
    }

}



Cette discussion est classé dans : import, javax, swing, color, p0


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec la bibliothèque javax.swing [ par PhalconX ] Je suis sous linux Redhat 9 et je n'arrive pas à lancer ce programme:import javax.swing.JOpitionPane; //Ici le import (include en c++ c pareil)public [JFram][TabbedPane]pb de construction de code!! [ par ArNOo ] salut..voila g des pb de construction de code...c vrai que je suis un noob en java...pouvez vs me proposer une solution....qui me crée un deuxieme ong Problème rafraichissement image avec Swing [ par ejouvin ] Bonjour.Je suis en train de faire une petite application qui contient une arborescence à gauche et une fenêtre de détail sur la droite.Dans le code su Boite de dialogue [ par Uims ] J'utilise JCréator, comment faire apparaitre une boite de dialogue:estce que cela marche t-il:import javax.swing.* ;import javax.swing.* ;public class PB DE SCROLLBAR :'( - URGENT - [ par Foub12 ] Bonjour,Je ne comprends pas pourquoi ma scrollbar ne s'affiche. Il me semble pourtant avoir tout fait...HELP ME !!!!Si je mets un BorderLayout CENTER creation d'interface graphique en java [ par melianos31 ] Bonjour.Je développe en ce moment une interface graphique en java ( merci le tuto de tucobouch ), mais j'ai un petit probleme.Si je met tout dans la jTable/jCheckBox [ par Dellys ] Bonjour Je voudrai s'avoir commet afficher un jCheckBox sur un ma jTable dans une colonnes de type booléen et aussi lui attribuer un listner < Probleme de requete [ par thanatos67 ] Salut à tous.Je suis en BTS IRIS et pour mon projet je dois créer une base de donnée mysql qui va recevoir des données d'une station météorologique et PB dans main [ par thanatos67 ] Salut à toi lecteur. Oui toi! J'ai un petit soucis.J'ai déjà eu un premier soucis résolu grace à l'aide de TWINUTS (encore merci). J'ai une classe dan JSlider renderer dans une JTable [ par malawih ] Bonjour, J ai insere des JSlider dans une colonne d une JTable, en refinissant le renderer et l editor. Le probleme est que les slider ne sont pas mis


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.