TextArea ou TextField com 2 linhas e caracteres limitados

Olá mestres do java!

Estou com uma dificuldade chata, meu cliente do meu PFC de java está pedindo para que um campo em especifico tenha 2 linhas para ele digitar uma descrição de um problema, pesquisando eu descobri q o textfield nao da pra ter 2 linhas então tenho que usar o textarea mas eu não encontrei nenhum tutorial clean e explicativo sem ser copiar e colar codigos de como fazer isso, alguem poderia me dar essa luz?

(Não sou nada avançado em java então desculpa se for uma duvida idiota.)

Agradeço desde já ! <3

import java.awt.BorderLayout;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

import components.DocumentSizeFilter;

public class Test {

    public static void main(String[] args) {
        new TestFrame().setVisible(true);
    }

    private static class TestFrame extends JFrame{
        private JTextField textField;
        private DefaultStyledDocument doc;
        private JLabel remaningLabel = new JLabel();

        public TestFrame() {
            setLayout(new BorderLayout());

            textField = new JTextField();
            doc = new DefaultStyledDocument();
            doc.setDocumentFilter(new DocumentSizeFilter(500));
            doc.addDocumentListener(new DocumentListener(){
                @Override
                public void changedUpdate(DocumentEvent e) { updateCount();}
                @Override
                public void insertUpdate(DocumentEvent e) { updateCount();}
                @Override
                public void removeUpdate(DocumentEvent e) { updateCount();}
            });
            textField.setDocument(doc);

            updateCount();

            add(textField, BorderLayout.CENTER);
            add(remaningLabel, BorderLayout.SOUTH);

            setLocationRelativeTo(null);
            pack();
        }

        private void updateCount()
        {
            remaningLabel.setText((500 -doc.getLength()) + " characters remaining");
        }
    }
}
1 curtida

Obrigado por tentar ajudar mas como citei no meu post eu não encontrei nada clean e explicativo como é o exemplo desse codigo acima, eu me bati com ele nas pesquisas mas não consigo entender o que fazer com ele nem o que cada linha ta fazendo, nao tem um comentário explicando o passo a passo e eu quero aprender nao quero simplesmente copiar o código, mas obrigado mesmo assim.

Infelizmente você nem sempre vai conseguir o código mastigado, independente de ser iniciante, precisa entender isso desde agora!


De acordo com a fonte:

Você pode limitar o tamanho máximo usando um DocumentFilter, verifique esta seção da documentação, pois possui um exemplo prático do que você precisa.

Tome isso como um exemplo, usei o componente do arquivo de exemplo acima:


Original:
You can limit the max size by using a DocumentFilter, check this documentation section, it has a working example of what you need.

Take this as an example, I used the component from the example file above:


        doc = new DefaultStyledDocument();
        doc.setDocumentFilter(new DocumentSizeFilter(500)); //tamanho max: 500
        doc.addDocumentListener(new DocumentListener() {
             //esse listener é pra adicionar alguma ação
             //em alguma alteração que for feita no documento/texto
            @Override
            public void changedUpdate(DocumentEvent e) { 
                updateCount(); 
                //esse updatecount é o método pra mostrar quantos 
                //caracteres faltam.
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                updateCount();
                //esse updatecount é o método pra mostrar quantos 
                //caracteres faltam.
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                updateCount();
                //esse updatecount é o método pra mostrar quantos 
                //caracteres faltam.
            }
        });

Método pra atualizar o jLabel pra mostrar qts caracteres faltam.

   private void updateCount() {
        remaningLabel.setText((500 - doc.getLength()) + " characters remaining");
    }

no código apresentado ta com o JTextField, pode mudar pra o seu JTextArea sem problemas…

private JTextArea textField = new JTextArea();
1 curtida

@rodriguesabner
Resolvi utilizando o componente “TextPane” ao inves de “TextArea” muito mais simples e ele já vem com a quebra de linha, porem, ele nao limita a quantidade de caracteres mas por incapacidade de minha parte em entender o código acima mesmo lendo varias e varias vezes e procurando artigos na internet chegando a conclusão de que no momento eu sou incapaz de usar esse código mas obrigado pela ajuda meu caro!

image