Olá galera, tudo bom?
Bom, não sei se alguém já passou por esse problema que estou tendo, mas pode ser que alguém possa me dar uma luz…vamos lá…
Estou desenvolvendo um componente simples, composto pelos seguintes itens:
- Panel
- JTextArea
- e três JLabel
a ideia do componente é limitar a quantidade de caracteres e exibir em tempo de digitação a quantidade de caracteres e o quanto falta para se chegar ao limite.
O componente está funcionando tranquilamente, meu problema é o seguinte:
Em tempo de designer no netbeans e consigo redimensionar tranquilamente o componente da forma que eu quero e do tamanho que eu quero, porém ao executar o sistema o componente é instanciado com os parâmetros iniciais, ou seja, com os valores contidos no contrutor no mesmo…eu queria que ao redimensionar o componente (com o mouse) em tempo de designer o mesmo fosse executado com este tamanho e não com o tamanho contido no construtor do componente.
segue meu código:
package jtextarealimitcaracter;
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class JTextAreaLimitCaracter extends JPanel {
JPanel panelPrincipal = new JPanel();
JScrollPane jScrollPane = new JScrollPane();
JTextArea txtArea = new JTextArea();
JLabel lblEstatico = new JLabel();
JLabel lblQuantidadeDigitada = new JLabel();
JLabel lblLimiteCaracter = new JLabel();
JLabel lblBarra = new JLabel();
private Integer limiteCaracteres = 10;
public JTextAreaLimitCaracter() {
super();
this.setVisible(true);
Dimension dimensao = super.getLayout().preferredLayoutSize(this);
super.setSize(dimensao.width,dimensao.height);
this.montaComponente();
}
private void montaComponente() {
jScrollPane.setViewportView(txtArea);
lblEstatico.setText("Caracteres:");
lblQuantidadeDigitada.setText("0");
lblBarra.setText("/");
lblLimiteCaracter.setText(limiteCaracteres.toString());
txtArea.setDocument(new FixedLengthDocument(limiteCaracteres));
DocumentListener acao;
acao = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
Integer quantidade = e.getDocument().getLength();
lblQuantidadeDigitada.setText(quantidade.toString());
}
@Override
public void removeUpdate(DocumentEvent e) {
Integer quantidade = e.getDocument().getLength();
lblQuantidadeDigitada.setText(quantidade.toString());
}
@Override
public void changedUpdate(DocumentEvent e) {
}
};
txtArea.getDocument().addDocumentListener(acao);
GroupLayout layoutPanel = new GroupLayout(panelPrincipal);
panelPrincipal.setLayout(layoutPanel);
System.out.println("Largura: "+ (super.getWidth() - 10));
System.out.println("Altura: "+ (super.getHeight()-50));
layoutPanel.setHorizontalGroup(
layoutPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layoutPanel.createSequentialGroup()
.addContainerGap()
.addGroup(layoutPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, (super.getWidth()>20?(super.getWidth()-10):super.getWidth()), Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layoutPanel.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(lblEstatico)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lblQuantidadeDigitada)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblBarra)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lblLimiteCaracter)))
.addContainerGap()));
layoutPanel.setVerticalGroup(
layoutPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layoutPanel.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, (super.getHeight()>60?(super.getHeight()-50):super.getHeight()) , Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layoutPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblEstatico)
.addComponent(lblQuantidadeDigitada)
.addComponent(lblBarra)
.addComponent(lblLimiteCaracter))
.addGap(16, 16, 16)));
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(panelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(0, Short.MAX_VALUE)));
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(0, Short.MAX_VALUE)
.addComponent(panelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)));
}
public Integer getLimiteCaracteres() {
return limiteCaracteres;
}
public void setLimiteCaracteres(Integer limiteCaracteres) {
this.limiteCaracteres = limiteCaracteres;
txtArea.setDocument(new FixedLengthDocument(limiteCaracteres));
lblLimiteCaracter.setText(limiteCaracteres.toString());
}
@Override
public void setSize(int width, int height) {
super.setSize(width, height);
this.remove(panelPrincipal);
this.montaComponente();
}
}
Alguém pode me ajudar?