Add Employee クラスからボタンを制御しようとしているので、ユーザー入力が受け入れられた場合、またはInputVerifierを使用していない場合に無効または有効にできます。私がしたことaddEmployeeButtonのゲッターとセッターを作成しました
public class AddEmployee extends javax.swing.JInternalFrame{
public JButton getJButton()
{
return addEmployeeButton;
}
public void setJButton(JButton buttonObject)
{
buttonObject = addEmployeeButton;
}
private void registerJComponents()
{
//INPUT VERIFIER
tfLastName.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfFirstName.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfMiddleName.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfNickname.setInputVerifier(new ValidateComponents(addEmployeeButton));
taAddress.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfContact.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfContactName.setInputVerifier(new ValidateComponents(addEmployeeButton));
tfContactNo.setInputVerifier(new ValidateComponents(addEmployeeButton));
}
}
ValidateComponents という名前の別のクラスからアクセスしています。ただし、このdisable
メソッドは AddEmployee インスタンスが渡されることを想定しています。null
NullPointerException がスローされるため、値を指定できません。
public class ValidateComponents extends InputVerifier
{
JButton myButton;
public ValidateComponents(JButton button)
{
this.myButton = button;
}
public void disable(JButton name, boolean disable, AddEmployee employee)
{
employee.setJButton(name);
name.setEnabled(!disable);
}
@Override
public boolean verify(JComponent input)
{
String tf = null;
//String ta = null;
String name = input.getName(); //GETTING THE NAME OF THE COMPONENT
if(input instanceof JTextField)
{
tf = ((JTextField) input).getText();
if(name.equals("tfLastName") || name.equals("tfFirstName") || name.equals("tfMiddleName") || name.equals("tfNickname") || name.equals("tfGuardianContactName"))
{
boolean valid = tf.trim().length() > 0;
disable(myButton, !valid);//Button instance
if(!valid)
{
input.setBackground(Color.PINK);//Set background color to pink if false.
input.setToolTipText("Fields cannot left blank");
return false;//Return false if the component need to keep focus
}
else
{
}
}
}
input.setBackground(Color.WHITE);//Set backgroud color to white if true.
return true;//Return true if the component should give up focus
}
}
2回目の試行:
メソッドの外で AddEmployee クラスのインスタンスを作成しようとしたとき。それは私にStackOverFlowErrorを与え、これは作成した私のオブジェクトを指しています。この問題を解決する最善の方法を誰か教えてもらえますか? どんな助けでも大歓迎です。
private AddEmployee employee = new AddEmployee();