SSISO Community

시소당

Hightlight text by drag and selection

import  java.awt.Color;
import  java.awt.Font;
import  java.awt.Graphics;
import  java.awt.Graphics2D;
import  java.awt.RenderingHints;
import  java.awt.Shape;
import  java.awt.event.MouseAdapter;
import  java.awt.event.MouseEvent;
import  java.awt.event.MouseMotionAdapter;
import  java.awt.font.FontRenderContext;
import  java.awt.font.TextHitInfo;
import  java.awt.font.TextLayout;
import  java.awt.geom.AffineTransform;

import  javax.swing.JFrame;
import  javax.swing.JPanel;

public  class  Highlights  extends  JPanel  {
    private  TextLayout  textLayout;

    private  TextHitInfo  firstHit,  secondHit;

    private  int  x  =  40,  y  =  80;

        public  Highlights(){
        addMouseListener(new  MouseAdapter()  {
            public  void  mousePressed(MouseEvent  me)  {
                firstHit  =  textLayout.hitTestChar(me.getX()  -  x,  me.getY()
                        -  y);
                secondHit  =  null;
            }

            public  void  mouseReleased(MouseEvent  me)  {
                secondHit  =  textLayout.hitTestChar(me.getX()  -  x,  me.getY()
                        -  y);
                repaint();
            }
        });
        addMouseMotionListener(new  MouseMotionAdapter()  {
            public  void  mouseDragged(MouseEvent  me)  {
                secondHit  =  textLayout.hitTestChar(me.getX()  -  x,  me.getY()
                        -  y);
                repaint();
            }
        });
                
        }
    public  void  paint(Graphics  g)  {
        Graphics2D  g2  =  (Graphics2D)  g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                RenderingHints.VALUE_FRACTIONALMETRICS_ON);

        String  s  =  "Drag  the  text  to  highlight  Java  Source  and  Support.";
        Font  font  =  new  Font("Serif",  Font.PLAIN,  32);

        if  (textLayout  ==  null)  {
            FontRenderContext  frc  =  g2.getFontRenderContext();
            textLayout  =  new  TextLayout(s,  font,  frc);
        }

        //  Draw  the  highlight.
        if  (firstHit  !=  null  &&  secondHit  !=  null)  {
            Shape  base  =  textLayout.getLogicalHighlightShape(firstHit
                    .getInsertionIndex(),  secondHit.getInsertionIndex());
            AffineTransform  at  =  AffineTransform.getTranslateInstance(x,  y);
            Shape  highlight  =  at.createTransformedShape(base);
            g2.setPaint(Color.white);
            g2.fill(highlight);
        }

        g2.setPaint(Color.black);
        textLayout.draw(g2,  x,  y);
    }
    public  static  void  main(String[]  args)  {
        JFrame  f  =  new  JFrame();
        f.getContentPane().add(new  Highlights());
        f.setSize(850,  250);
        f.show();

    }
}

[2008년  03월  13일  20:49:30  수정되었습니다.]

517 view

4.0 stars