package elte.java2_utikalauz5.java2d; import java.awt.*; import java.awt.font.*; import java.awt.event.*; /** peldaprogram szovegek kijelolesere. @link.forrásfájl {@docRoot}/../data/java2d/src SzovegKijeloles.java @link.letöltés {@docRoot}/../data/java2d SzovegKijeloles.jar @since Java 2 Útikalauz programozóknak */ class SzovegKijeloles extends Canvas implements MouseListener, MouseMotionListener { /** Verziószám */ private final static long serialVersionUID = 15L; int x1, x2, y1, y2; // az uj kijeloles helye int oldx1, oldx2, oldy1, oldy2; // az elozo kijeloles helye public void SzovegKijeloles () { x1 = x2 = y1 = y2 = 0; oldx1 = oldx2 = oldy1 = oldy2 = 0; } public void mouseClicked (MouseEvent e) { } public void mouseEntered (MouseEvent e) { } public void mouseExited (MouseEvent e) { } public void mousePressed (MouseEvent e) { oldx1 = x1; // uj kijelolesbe kezdunk, igy az elozo oldy1 = y1; // kijeloles helyet a torles miatt megjegyezzuk x1 = e.getX (); y1 = e.getY (); x2 = x1; // az uj kijeloles me'g csak most kezdodik; ez y2 = y1; // ures kijelolest jelent, azaz: (x1, y1) = (x2, y2) repaint (); } public void mouseReleased (MouseEvent e) { oldx1 = x1; // uj kijelolesbe kezdunk, igy az elozo oldy1 = y1; // kijeloles helyet a torles miatt megjegyezzuk oldx2 = x2; oldy2 = y2; x2 = e.getX (); y2 = e.getY (); repaint (); } public void mouseDragged (MouseEvent e) { oldx1 = x1; // uj kijelolesbe kezdunk, igy az elozo oldy1 = y1; // kijeloles helyet a torles miatt megjegyezzuk oldx2 = x2; oldy2 = y2; x2 = e.getX (); y2 = e.getY (); repaint (); } public void mouseMoved (MouseEvent e) { } public void update (Graphics g) { paint (g); } public void initScreen () { Frame f = new Frame (); f.add (this); addMouseListener (this); addMouseMotionListener (this); f.addWindowListener ( new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit (0); } } ); f.setSize (500, 200); f.setVisible (true); } public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; FontRenderContext frc = g2.getFontRenderContext (); Font betutipus = new Font ("Times New Roman", Font.BOLD, 12); String szoveg = new String ("Ez a szoveg 12 pontos, kover Times New Roman betutipussal irodott."); TextLayout megjelenito = new TextLayout (szoveg, betutipus, frc); // az elozo kijeloles helyet kerdezzuk le TextHitInfo talalat = megjelenito.hitTestChar (oldx1, oldy1); int elsoTalalat = talalat.getInsertionIndex (); talalat = megjelenito.hitTestChar (oldx2, oldy2); int masodikTalalat = talalat.getInsertionIndex (); // az elozo kijelolest toroljuk (feherrel atrajzoljuk azt a reszt) Shape kijeloltTerulet = megjelenito.getLogicalHighlightShape (elsoTalalat, masodikTalalat); g2.setColor (Color.white); g2.translate (0, 100); g2.fill (kijeloltTerulet); g2.translate (0, -100); // az uj kijeleles helyet lekerdezzuk talalat = megjelenito.hitTestChar (x1, y1); elsoTalalat = talalat.getInsertionIndex (); talalat = megjelenito.hitTestChar (x2, y2); masodikTalalat = talalat.getInsertionIndex (); // az uj kijelolest pirossal kirajzoljuk kijeloltTerulet = megjelenito.getLogicalHighlightShape (elsoTalalat, masodikTalalat); g2.setColor (Color.red); g2.translate (0, 100); g2.fill (kijeloltTerulet); g2.translate (0, -100); // megjelenitjuk a szoveget g2.setColor (Color.blue); megjelenito.draw (g2, 0, 100); } public static void main (String[] args) { SzovegKijeloles sz = new SzovegKijeloles (); sz.initScreen (); } }