Gostaria de saber o que estou fazendo de errado tenho duas classe uma o visual e outra para a validação se que ao digitar um valor abaixo do minimo irá ficar cinza ao chegar o valor normal irá ficar na cor branca e ao dar o limite deverá travar e ao passar o mouse sobre o campo dirá mostrar uma mensagem de alerta com o que falta ou o quanto resta a digitar.
Porem se eu colocar um ele em um JTextField na classe somente valida.
agora se eu colocar vários ele somente limita mas não troca as cores e nem mostra o alter corretamente
Segue abaixo o código
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
public class Autocorecao extends JFrame {
private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Autocorecao frame = new Autocorecao();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});}
public Autocorecao() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 276, 261);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();
textField.setBounds(10, 23, 191, 20);
contentPane.add(textField);
textField.setColumns(10);
Tamanho_campo t = new Tamanho_campo();
t.TratarJtextField(2,12,textField);
textField_1 = new JTextField();
textField_1.setColumns(10);
textField_1.setBounds(10, 69, 191, 20);
contentPane.add(textField_1);
t.TratarJtextField(3,6,textField_1);
textField_2 = new JTextField();
textField_2.setColumns(10);
textField_2.setBounds(10, 110, 191, 20);
contentPane.add(textField_2);
t.TratarJtextField(5,10,textField_2);
textField_3 = new JTextField();
textField_3.setColumns(10);
textField_3.setBounds(10, 155, 191, 20);
contentPane.add(textField_3);
t.TratarJtextField(4,8,textField_3);
JLabel lblNewLabel = new JLabel("min 2 max 12");
lblNewLabel.setBounds(10, 11, 191, 14);
contentPane.add(lblNewLabel);
JLabel lblMinMax = new JLabel("min 3 max 6");
lblMinMax.setBounds(10, 54, 191, 14);
contentPane.add(lblMinMax);
JLabel lblMinMax_1 = new JLabel("min 5 max 10");
lblMinMax_1.setBounds(10, 96, 191, 14);
contentPane.add(lblMinMax_1);
JLabel lblMinMax_2 = new JLabel("min 4 max 8");
lblMinMax_2.setBounds(10, 141, 191, 14);
contentPane.add(lblMinMax_2);
}
}
Validação:
package lucas.funcao;
import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.PlainDocument;
import softmoby.com.br.Teste.DocumentSizeFilter;
public class Tamanho_campo extends PlainDocument {
public static JTextField textArea;
public static DefaultStyledDocument doc;
public static int maximo1=0;
public static int minimo1=0;
public static JTextField t;
public static String t_conteudo;
public void TratarJtextField(int minimo,int maximo,JTextField textArea) {
t= textArea;
maximo1 =maximo;
minimo1=minimo;
doc = new DefaultStyledDocument();
doc.setDocumentFilter(new DocumentSizeFilter(maximo));
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();
}
});
textArea.setDocument(doc);
updateCount();
}
private static void updateCount() {
int quan =0;
try {
quan = doc.getLength();
} catch (Exception e) {
}
if(minimo1>quan){
t.setBackground(Color.LIGHT_GRAY);
String q = Integer.toString(quan-minimo1).replaceAll("\\D", "");
t.setToolTipText("Precisa mais "+q+" caracter");
}
if(minimo1<=quan){
String q = Integer.toString(maximo1-quan).replaceAll("\\D", "");
t.setToolTipText("Restam "+q+" caracter");
t.setBackground(Color.WHITE);
}
}
}