Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leogtz

#1261
He encontrado esto, parece que funciona, voy a ver como lo adhiero al proyecto.


Código (java) [Seleccionar]
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.Document;

public class LineNr extends JPanel
{
  JTextPane pane;
  JScrollPane scrollPane;

  public LineNr ()
  {
    super ();
    setMinimumSize (new Dimension (30, 30));
    setPreferredSize (new Dimension (30, 30));
    setMinimumSize (new Dimension (30, 30));
    pane = new JTextPane () // we need to override paint so that thelinenumbers stay in sync
    {
      public void paint (Graphics g)
      {
super.paint (g);
LineNr.this.repaint ();
      }
    };
    scrollPane = new JScrollPane (pane);
  }

  public void paint (Graphics g)
  {
    super.paint (g);
    int start =
      pane.viewToModel (scrollPane.getViewport ().getViewPosition ());
    int end =
      pane.
      viewToModel (new
   Point (scrollPane.getViewport ().getViewPosition ().x +
  pane.getWidth (),
  scrollPane.getViewport ().getViewPosition ().y +
  pane.getHeight ()));
    Document doc = pane.getDocument ();
    int startline = doc.getDefaultRootElement ().getElementIndex (start);
    int endline = doc.getDefaultRootElement ().getElementIndex (end);
    int fontHeight = g.getFontMetrics (pane.getFont ()).getHeight (); // font
    for (int line = startline, y = 0; line <= endline;
line++, y += fontHeight)
      {
g.drawString (Integer.toString (line), 0, y);
      }

  }

  public static void main (String[]args)
  {
    JFrame frame = new JFrame ();
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.getContentPane ().setLayout (new BorderLayout ());
    final LineNr nr = new LineNr ();
    frame.getContentPane ().add (nr, BorderLayout.WEST);
    frame.getContentPane ().add (nr.scrollPane, BorderLayout.CENTER);
    frame.pack ();
    frame.setSize (new Dimension (400, 400));
//frame.show();
    frame.setVisible (true);
  }
#1262
Programación General / Re: ¿perl o python?
12 Octubre 2010, 01:21 AM
Cita de: VillanoSam en 11 Octubre 2010, 17:03 PM

Python, mas que Perl y Ruby, ha tenido mas aceptacion.

Totalmente en desacuerdo.
#1263
Programación General / Re: ¿perl o python?
11 Octubre 2010, 07:04 AM
Dejando de lado los demás lenguajes, yo te recomendaría Perl, el hecho de hacer una tarea de distintas maneras me encanta, además de que soy amante del código ofuscado.

Ambos los puedes usar con POO, y hablando ya en serio, Perl es más rápido que Python, Perl es uno de los lenguajes con más documentación.

Pero para gustos colores, así que elige el que más se adecue a tus gustos.

Saludos.
#1264
Qué raro, he especificado que vaya a la línea 50 en un archivo que tiene miles de líneas y deja la línea al final del JTextArea.

Código (java) [Seleccionar]

import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.*;

public class TextViewer extends javax.swing.JFrame {
   
   void Ir(int line, JTextArea area)
   {
       String []t = area.getText().split("\n");
int position = 0;
for(int index = 0; index < t.length; index++)
       {
if(index == line - 1)
                   break;
if(t[index].length() != 0)
       position += t[index].length();
}
       area.setCaretPosition(position + line - 1);
   }
   
  int JTextLength(String fileName) throws FileNotFoundException
  {
      int longitud = 0;
      File archivo = new File(fileName);
      Scanner sc = new Scanner(archivo);
      sc.useDelimiter("\n");
      String linea;
     
      while (sc.hasNext())
      {
          linea = sc.next();
          longitud++;
      }
                       
      return longitud;
  }
   
   public TextViewer()
   {
       
       this.setLayout(new GridBagLayout());
       GridBagConstraints gbc = new GridBagConstraints();
       JScrollPane scroll = new JScrollPane(texto);
       gbc.fill = GridBagConstraints.BOTH;
       add(scroll, gbc);  
       
       JMenu file = new JMenu("File");
       JMenu help = new JMenu("Help");
       
       help.setMnemonic('H');
       file.setMnemonic('F');
       
       // Elemento del menú "Ayuda".
       JMenuItem aboutItem = new JMenuItem("Acerca de ...");
       aboutItem.setMnemonic('T');
       
       help.add(aboutItem);
       JMenuItem openItem = new JMenuItem("Abrir");
       openItem.setMnemonic('A');
       file.add(openItem);
       JMenuItem exitItem = new JMenuItem("Salir");
       exitItem.setMnemonic('S');
       file.add(exitItem);

       openItem.addActionListener(
new ActionListener()
       {
           public void actionPerformed(ActionEvent e)
           {
               texto.setEditable(false);
               texto.setText("");
               int lineNumber = 0;
String wd = System.getProperty("user.home");
JFileChooser fc = new JFileChooser(wd);
               Filtro filtro = new Filtro();
               filtro.addExtension("txt");
               filtro.setDescription("Archivos de texto plano : ");
               fc.setAcceptAllFileFilterUsed(false);
               fc.setFileFilter(filtro);
               
               fc.setDialogTitle("Seleccione el archivo de texto a abrir");
String filename = "";
int rc = fc.showDialog(null, "Seleccionar archivo");
if (rc == JFileChooser.APPROVE_OPTION)
{
                   try {
                       File file = fc.getSelectedFile();
                       filename = file.getAbsolutePath();
                       lblNameFile.setText(filename);
                       // Leer archivo:
                       File archivo = new File(filename);
                       Scanner sc = new Scanner(archivo);
                       sc.useDelimiter("\n");
                       String linea;
                       while (sc.hasNext())
                       {
                           linea = sc.next();
                           texto.append(++lineNumber + "\t" + linea + "\n");
                       }
                       //texto.setCaretPosition(0);
                       lineNumber = 0;
                       Ir(50, texto);
                       sc.close();
                   } catch (FileNotFoundException ex) {
                       Logger.getLogger(TextViewer.class.getName()).log(Level.SEVERE, null, ex);
                       JOptionPane.showMessageDialog(null, "Error abriendo la ***** : " + filename);
                   }
}
           }
}
       );


Saludos.

EDITO:

Al final queda así:



No quiero que los números de línea salgan en el texto, ¿alguna idea de qué componente usar para esto o cómo?
#1265
Gracias, el único problema es que me pone la línea que quiero al final del JTextArea, tengo que corregir eso.

También me queda corregir que reciba nombres de archivos con espacios.
#1266
Si estás aprendiendo yo te recomendaría C/C++, luego pasate a Java.

Yo estas vacaciones me dedicaré a Java y a Perl.
#1267
De acuerdo, podría servir para ocultar códigos muy largos.
#1268
Hola, estoy haciendo un visor de documentos de texto(sí lo sé, es una estupidez, pero quiero practicar un poco de componentes en Java, aparte que tengo cientos de libros en .txt y me sería útil).

Bueno, lo que hago para volcar todo al JTextArea es leer el archivo con un Scanner y en cada línea hacer un append al JTextArea, así:
Código (java) [Seleccionar]

File file = fc.getSelectedFile();
                       filename = file.getAbsolutePath();
                       lblNameFile.setText(filename);
                       // Leer archivo:
                       File archivo = new File(filename);
                       Scanner sc = new Scanner(archivo);
                       sc.useDelimiter("\n");
                       String linea;
                       while (sc.hasNext())
                       {
                           linea = sc.next();
                           texto.append((linea.isEmpty() ? " " : ++lineNumber) + "\t" + linea + "\n");
                       }
                       lineNumber = 0;
                       sc.close();


Funciona bien, el problema es que el scroll se va hasta abajo(estamos hablando de unas 3000 líneas por archivo de texto), así que quisiera que aunque todo fuese volcado al JTextArea, el scroll quedará en la primera línea, ¿podrían decirme cómo?

Otra cosa, quisiera un método Ir a, ¿hay algo que me permita ir a cierta línea en el JTextArea?

Usé este método para obtener el número de línea(algo rústico, pero funciona):

Código (java) [Seleccionar]
while (sc.hasNext())
                       {
                           linea = sc.next();
                           texto.append((linea.isEmpty() ? " " : ++lineNumber) + "\t" + linea + "\n");
                       }


Les dejo todo el código para que lo prueben, de antemano gracias.

http://rapidshare.com/files/424244300/TextViewer.java

http://www.megaupload.com/?d=M5EZAF8X

EDITO:

He solucionado lo de poner el cursor en la primera línea así:

texto.setCaretPosition(0);

Ahora me queda otra duda, estoy teniendo problemas al abrir archivos con espacios con el Scanner, ¿alguien sabe como resolverlo?
#1269
Igual tendríamos que hacer hincapié en el "me gustas" porque quieres solo sexo o el "me gustas" porque es lo anterior al "te amo".

Yo doy la explicación de que a la gente le da miedo por que la otra persona pueda rechazarlo, vamos, el saber a donde ir después de decir "me gustas".

#1270
Scripting / Re: VBS variables
10 Octubre 2010, 07:04 AM
@scrngs, utiliza las etiquetas de código o tu tema será bloqueado.