begin process at 2012 02 12 17:05:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Autre

 > 

caret perso


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

caret perso

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,498 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales