Dae pessoal!
Estou fazendo uma applet simples para o usuário digitar valores em vários JTextField.
Cada um dos valores que o usuário colocar devem ser verificados assim que ele terminar de colocá-lo. Pra resolver isso resolvi o usar um FocusListener, sempre que um JTextField perdesse o focus eu poderia validar o que foi digitado. Até aí não tive problema.
O problema apareceu quando o usuário coloca um valor errado. Coloquei um JOptionPane para avisar o usuário que o valor digitado está incorreto, então utilizo um requestFocus() mas não consigo passar o focus para o JTextField que teve problema assim que dou “OK” no JOptionPane…
O que eu fiz funciona, mas muuiito mal! :evil:
Ao invez do JOptionPane aparecer uma única vez ele aparece 4!
Alguém aí tem uma idéia de como arrumar isso?? Ou fazer isso de uma outra maneira??
O código tá aí embaixo, se alguem puder me ajudar eu agradeço, e muito! 
pro erro aparecer é só digitar 1000 (ou algo maior do que 300) no primeiro JTextField (Fill Time (s)) e depois clicar em outro JTextField… o código que trata o evento tá em “validateInputText”
desde já agradeço :lol:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TimeProfilesJPanel extends TimeProfilesJPanel_view {
private int[] m_fillTimeLimits = {0, 300};
private String m_fillTimeUnit = "s";
private int[] m_holdingTimeLimits = {0, 600};
private String m_holdingTimeUnit = "s";
private int[] m_coolingTimeLimits = {0, 600};
private String m_coolingTimeUnit = "s";
private int[] m_moldOpenTimeLimits = {0, 600};
private String m_moldOpenTimeUnit = "s";
private int[] m_cycleTimeLimits = {0, 600};
private String m_cycleTimeUnit = "s";
public TimeProfilesJPanel(){
this.init();
}
public void init(){
this.initListeners();
}
public void initComboBox(){
}
public void initListeners(){
TimeProfileJPanel_JTextField_focusAdapter jTextFieldListener = new TimeProfileJPanel_JTextField_focusAdapter(this);
this.m_fillTimeTextField.addFocusListener(jTextFieldListener);
this.m_holdingTimeTextField.addFocusListener(jTextFieldListener);
this.m_coolingTimeTextField.addFocusListener(jTextFieldListener);
this.m_moldOpenTimeTextField.addFocusListener(jTextFieldListener);
this.m_cycleTimeTextField.addFocusListener(jTextFieldListener);
}
public void validateInputText(FocusEvent fe){
Object source = fe.getSource();
int value;
if(source.equals(this.m_fillTimeTextField)){
String inputText = this.m_fillTimeTextField.getText();
if(!inputText.equals("")){
try{
value = Integer.parseInt(this.m_fillTimeTextField.getText());
if(!(value >= this.m_fillTimeLimits[0] && value <= this.m_fillTimeLimits[1])){
JOptionPane.showMessageDialog(null, "sdfsdfsdfs");
this.m_fillTimeTextField.requestFocus();
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
else if(source.equals(this.m_holdingTimeTextField)){
}
else if(source.equals(this.m_coolingTimeTextField)){
}
else if(source.equals(this.m_moldOpenTimeTextField)){
}
else if(source.equals(this.m_cycleTimeTextField)){
}
else{
//erro
}
}
public static void main(String[] args){
JFrame f = new JFrame("teste");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new TimeProfilesJPanel());
f.pack();
f.setVisible(true);
}
}
class TimeProfileJPanel_JTextField_focusAdapter implements FocusListener{
private TimeProfilesJPanel adaptee;
public TimeProfileJPanel_JTextField_focusAdapter(TimeProfilesJPanel adaptee){
this.adaptee = adaptee;
}
public void focusLost(FocusEvent fe){
//System.out.println("Perdeu o focus");
this.adaptee.validateInputText(fe);
}
public void focusGained(FocusEvent fe){
//System.out.println("Ganhou o focus");
}
}
outra parte…
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class TimeProfilesJPanel_view extends JPanel {
public TimeProfilesJPanel_view() {
initComponents();
}
private void initComponents() {
label1 = new JLabel();
label2 = new JLabel();
m_fillTimeTextField = new JTextField();
label3 = new JLabel();
m_holdingTimeTextField = new JTextField();
label4 = new JLabel();
m_coolingTimeTextField = new JTextField();
label5 = new JLabel();
m_moldOpenTimeTextField = new JTextField();
label6 = new JLabel();
label7 = new JLabel();
m_cycleTimeTextField = new JTextField();
setBorder(new EmptyBorder(5, 5, 5, 5));
setLayout(new GridBagLayout());
((GridBagLayout)getLayout()).columnWidths = new int[] {20, 0, 100, 0};
((GridBagLayout)getLayout()).rowHeights = new int[] {0, 0, 0, 0, 0, 20, 0, 0, 0};
((GridBagLayout)getLayout()).columnWeights = new double[] {0.0, 0.0, 0.0, 1.0E-4};
((GridBagLayout)getLayout()).rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0E-4};
label1.setText("Machine variables (indenpendently controllable)");
label1.setFont(new Font("Tahoma", Font.BOLD, 11));
label1.setForeground(Color.red);
add(label1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
label2.setText("Fill time (s)");
add(label2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
add(m_fillTimeTextField, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 0), 0, 0));
label3.setText("Holding time (s)");
add(label3, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
add(m_holdingTimeTextField, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 0), 0, 0));
label4.setText("Cooling time (s)");
add(label4, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
add(m_coolingTimeTextField, new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 0), 0, 0));
label5.setText("Mold-open time (s)");
add(label5, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
add(m_moldOpenTimeTextField, new GridBagConstraints(2, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 0), 0, 0));
label6.setText("Process variables (dependent)");
label6.setFont(new Font("Tahoma", Font.BOLD, 11));
label6.setForeground(Color.red);
add(label6, new GridBagConstraints(0, 6, 2, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 5, 5), 0, 0));
label7.setText("Cycle time (s)");
add(label7, new GridBagConstraints(1, 7, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 5), 0, 0));
add(m_cycleTimeTextField, new GridBagConstraints(2, 7, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0));
}
protected JLabel label1;
protected JLabel label2;
protected JTextField m_fillTimeTextField;
protected JLabel label3;
protected JTextField m_holdingTimeTextField;
protected JLabel label4;
protected JTextField m_coolingTimeTextField;
protected JLabel label5;
protected JTextField m_moldOpenTimeTextField;
protected JLabel label6;
protected JLabel label7;
protected JTextField m_cycleTimeTextField;
}