[英]Disable JButton from another class
我試圖在同時使用Input Verifier時禁用按鈕。 我想在文本字段為空時禁用按鈕。 這是我的方法。
AddEmployee.class
public class AddEmployee extends javax.swing.JInternalFrame
{
public JButton getJButton()
{
return addEmployeeButton;
}
public void setJButton(JButton buttonObject)
{
buttonObject = addEmployeeButton;
}
}
ValidateComponents.class
public class ValidateComponents extends InputVerifier
{
public void disable(JButton name)
{
AddEmployee employee = new AddEmployee();
employee.setJButton(name);
name.setEnabled(false);
}
@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"))
{
if(tf.trim().length() == 0 || tf.equals(""))
{
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
}
}
}
}
在if條件下調用disable()
方法是否有效? 因此,如果文本字段為空,它可以調用。 任何幫助,將不勝感激! 謝謝 :)
更新:
public class ValidateComponents extends InputVerifier
{
private AddEmployee employee = new AddEmployee();
JButton myButton;
public void disable(JButton name, boolean disable)
{
employee.setJButton(name);
name.setEnabled(!disable);
myButton = name;
}
@Override
public boolean verify(JComponent input)
{
String tf = 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);
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
}
}
}
}
您的班級應該稍作修改以更加靈活
private AddEmployee employee = new AddEmployee();
public void disable(JButton name, boolean disable){
employee.setJButton(name);
name.setEnabled(!disable); //NOT because yours is called disable and Swing's is called enabled ;)
}
由此,您可以輕松更改按鈕的狀態。 問題是,為什么需要將此添加到AddEmployee
? 使用驗證程序創建一個布爾值(每個示例有效),該布爾值將告訴您是否應該啟用按鈕。 如果您不這樣做,則永遠不會重新激活該按鈕。
if(name.equals("tfLastName") || name.equals("tfFirstName") || name.equals("tfMiddleName") || name.equals("tfNickname") || name.equals("tfGuardianContactName"))
{
boolean valid = tf.trim().length() > 0; //Change the sign here and no need for the following > || tf.equals("")
disable(myButton, !valid); // YOU NEED TO HAVE THE BUTTON INSTANCE SOMEWHERE, IN THE CONSTRUCTOR OR A SETTER...
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 {
// ADD THE VALID CASE HERE
}
}
僅需注意,您應該將要檢查的實例發送到驗證程序並將其存儲在Collection中,然后作為input
,檢查集合中是否有相同的實例(例如List),這比檢查要干凈名字 ;)
public class ValidateComponents extends InputVerifier
{
JButton myButton;
public ValidateComponents(JButton button)
this.myButton = button;
}
...
}
創建ValidateComponents實例時,只需設置按鈕即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.