Package com.tail

Source Code of com.tail.TextPanel

package com.tail;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;

public class TextPanel extends JComponent {

  private static final long serialVersionUID = 6001973725994078371L;

  private Color BACKGROUND_1 = new Color(226,223,239);
  private Color BACKGROUND_2 = new Color(209,220,231);

  private static final int LINE_HEIGHT=18;
  private static final int SEPARATION_LEFT = 4;
  private static final int SEPARATION_RIGHT = 4;
  private static final int SEPARATION_LINE_SIZE = 1;

  //private Color LINE_NUMBER_TEXT_COLOR = new Color(88,190,91);
  //private Color TEXT_COLOR = new Color(88,190,91).brighter();
  private Color LINE_NUMBER_TEXT_COLOR = Color.GRAY;
  private Color TEXT_COLOR = Color.BLACK;

  private Font font = new Font("Consolas",Font.BOLD, 12);
  private Font fontPlain = new Font("Consolas",Font.PLAIN, 12);

  ArrayList<String> document;

  FileReader reader;

  private Dimension textBounds = new Dimension(0, 0);
  private Point viewPortPoint = new Point(0,0);

  public TextPanel() {
    super();
    document = new ArrayList<String>();

    setOpaque(true);
    setBackground(BACKGROUND_1);
    initComponents();
  }

  public void addLine(String line){
    document.add(line);
    FontMetrics fm = this.getFontMetrics(font); // or another font
    int strw = fm.stringWidth(String.valueOf(document.size()));
    int newWidth = strw+SEPARATION_RIGHT+SEPARATION_LEFT+SEPARATION_LINE_SIZE + fm.stringWidth(line);
    textBounds = new Dimension(Math.max(newWidth, textBounds.width), document.size()*LINE_HEIGHT);
    this.repaint();
  }


  public void updateLines(int firsLine, List<String> lines){

  }


  public void addLines(ArrayList<String> lines){
    document.addAll(lines);
    FontMetrics fm = this.getFontMetrics(font);
    int strw = fm.stringWidth(String.valueOf(document.size()));
    int finalWidth = 0;
    for (String line : lines){
      int newWidth = strw+SEPARATION_RIGHT+SEPARATION_LEFT+SEPARATION_LINE_SIZE+ fm.stringWidth(line);
      finalWidth = Math.max(finalWidth, newWidth);
    }
    textBounds = new Dimension(Math.max(finalWidth, textBounds.width), document.size()*LINE_HEIGHT);
    this.repaint();
  }

  @Override
  protected void paintComponent(Graphics g) {
    Rectangle rect=g.getClipBounds();
    ((Graphics2D)g).setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

    ((Graphics2D)g).setRenderingHint(
            RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

    g.setColor(Color.WHITE);
    g.fillRect(rect.x,rect.y,rect.width,rect.height);

    if (document.isEmpty()){
      return;
    }

    int separation = (int)font.getStringBounds(String.valueOf(document.size()), ((Graphics2D)g).getFontRenderContext()).getWidth();


    int cont=viewPortPoint.y/LINE_HEIGHT;
    int posy=0;

    int tope;
    if (textBounds.height > (viewPortPoint.y+this.getSize().height)){
      tope = this.getSize().height;
    }else{
      tope = textBounds.height;
    }

    //pintamos el pijama
    while(posy <  tope){

      posy+=LINE_HEIGHT;
      g.setColor(LINE_NUMBER_TEXT_COLOR);
      g.setFont(font);
      g.drawString(String.valueOf(cont+1), 0,posy-4);
      //changeColor=!changeColor;

      g.setFont(fontPlain);

      g.setColor(TEXT_COLOR);
      int stringSeparation = separation+SEPARATION_RIGHT+SEPARATION_LEFT+SEPARATION_LINE_SIZE;
      g.drawString(document.get(cont),stringSeparation,posy-4);
      cont++;

    }
    System.out.println("he pintado"+cont);
    g.setColor(Color.GRAY);
    g.fillRect(separation+SEPARATION_LEFT,rect.y,SEPARATION_LINE_SIZE,rect.height);
  }



  private void initComponents(){
    this.addMouseWheelListener(new MouseAdapter() {

      @Override
      public void mouseWheelMoved(MouseWheelEvent arg0) {
        System.out.println("qu� pasa t�o");
        Dimension dim = TextPanel.this.getSize();
        if ((dim.height+viewPortPoint.y)<textBounds.height){
          viewPortPoint.translate(0, arg0.getWheelRotation()*LINE_HEIGHT);
          TextPanel.this.repaint();
        }

      }



    });

    this.addMouseMotionListener(new MouseMotionListener() {

      @Override
      public void mouseMoved(MouseEvent arg0) {
        System.out.println("me muevo");
        if (!TextPanel.this.isFocusOwner()){
          TextPanel.this.requestFocusInWindow();
          System.out.println("me HAGO due�o Y SE�OR DEL FOCO");
        }
      }

      @Override
      public void mouseDragged(MouseEvent arg0) {
        System.out.println("dragueando"+System.currentTimeMillis());

      }
    });

    this.addKeyListener(new KeyListener() {

      @Override
      public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub

      }

      @Override
      public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

      }

      @Override
      public void keyPressed(KeyEvent arg0) {
        if (arg0.getKeyCode()==KeyEvent.VK_PAGE_DOWN){
          int y = viewPortPoint.y+TextPanel.this.getSize().height;
          if (y>textBounds.height){
            y = textBounds.height- TextPanel.this.getSize().height;
          }
          viewPortPoint.setLocation(0, y);
          TextPanel.this.repaint();
        }else if(arg0.getKeyCode()==KeyEvent.VK_PAGE_UP){
          int y = viewPortPoint.y-TextPanel.this.getSize().height;
          if (y<0){
            y = 0;
          }
          viewPortPoint.setLocation(0, y);
          TextPanel.this.repaint();

        }

      }
    });
}
}
TOP

Related Classes of com.tail.TextPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.