miércoles, 27 de noviembre de 2013

Source code: JTextFieldLinesTest

Código fuente del programa JTextFieldLinesTest

Ver la entrada correspondiente en el siguiente enlace:


JTextField y saltos de línea



package pruebas;

import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.text.AbstractDocument;
import javax.swing.text.Document;
import javax.swing.text.DocumentFilter;

/**
 * @see http://bugs.sun.com/view_bug.do?bug_id=6427290
 */
public class JTextFieldLinesTest {

    public static String makeInfo() {
        String info= String.format(""
            + "%njava.class.version= "            + System.getProperty("java.class.version")
            + "%njava.runtime.version= "          + System.getProperty("java.runtime.version")
            + "%njava.specification.name= "       + System.getProperty("java.specification.name")
            + "%njava.specification.vendor= "     + System.getProperty("java.specification.vendor")
            + "%njava.specification.version= "    + System.getProperty("java.specification.version")
            + "%njava.version= "                  + System.getProperty("java.version")
            + "%njava.vm.info= "                  + System.getProperty("java.vm.info")
            + "%njava.vm.name= "                  + System.getProperty("java.vm.name")
            + "%njava.vm.specification.name= "    + System.getProperty("java.vm.specification.name")
            + "%njava.vm.specification.vendor= "  + System.getProperty("java.vm.specification.vendor")
            + "%njava.vm.specification.version= " + System.getProperty("java.vm.specification.version")
            + "%njava.vm.vendor= "                + System.getProperty("java.vm.vendor")
            + "%njava.vm.version= "               + System.getProperty("java.vm.version")
            + "%nos.arch= "                       + System.getProperty("os.arch")
            + "%nos.name= "                       + System.getProperty("os.name")
            + "%nos.version= "                    + System.getProperty("os.version")
            + "%n"
        );

        return info;
    }
    //--------------------------------------------------------------------------

    public static void selectAll(final JTextField aTextField) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                aTextField.selectAll();
                aTextField.requestFocusInWindow();
            }
        });
    }
    //--------------------------------------------------------------------------

    public static void example() {
        final String DEFAULT_TEXT= String.format("Line1%nLine2%nLine3%nLine4%nLine5");

        JTextArea textArea= new JTextArea();
        textArea.setText( makeInfo() );
        textArea.setEditable(false);

        final JTextField textField= new JTextField();
        textField.setEditable(true);

        String text= String.format(DEFAULT_TEXT);
        textField.setText(text);
        selectAll(textField);

        final JToggleButton button= new JToggleButton("Toogle new lines mode");

        final JPanel panel= new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        textArea.setAlignmentX(Component.CENTER_ALIGNMENT);
        textField.setAlignmentX(Component.CENTER_ALIGNMENT);
        button.setAlignmentX(Component.CENTER_ALIGNMENT);
        panel.add(textArea);
        panel.add(new JSeparator(JSeparator.HORIZONTAL));
        panel.add(textField);
        panel.add(new JSeparator(JSeparator.HORIZONTAL));
        panel.add(button);

        final JFrame frame= new JFrame("JTextField test");
        frame.setContentPane(panel);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        button.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                Document document= textField.getDocument();
                AbstractDocument abstractDocument= (AbstractDocument) document;

                DocumentFilter filter;
                if (button.isSelected() == true) {
                    filter= new DocumentFilter();
                }
                else {
                    filter= null;
                }
                abstractDocument.setDocumentFilter(filter);

                String text= DEFAULT_TEXT;
                textField.setText(text);
                selectAll(textField);

                panel.revalidate();
                panel.repaint();
                frame.pack();
            }
        });

        frame.setVisible(true);
    }
    //--------------------------------------------------------------------------

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                example();
            }
        });
    }
    //--------------------------------------------------------------------------

}

2 comentarios:

  1. Excelente.. funciona ,muy bien.. y me va a servir para mostrar informacion rapida multilineal... ya que el JtextArea tiene ciertas propiedades que no puedo quitarle como el recuadro o borde.. el fondo de color y otras cosas que suele ser molesto para presentar un texto.. tambien se puede realizar un JLabel en multilinea de una manera mas sencilla

    ResponderEliminar
    Respuestas
    1. Me alegra que te sirva para solventar algún problema.
      Respecto a varias líneas en un JLabel te puede interesar incrustar HTML, como expliqué aquí para los Tool Tips:

      http://programacion-curiosidad.blogspot.com.es/2014/02/tool-tip-multilinea-en-java-swing.html

      Gracias por comentar.

      Eliminar