我有一个java项目,我遇到了问题。
目标说明:
在表单A(MainForm
)中,我在enable(false)
模式下有一些按钮。
我有一个函数LockOrUnlockButtons()
来检查一些条件,如果这个函数返回true,那么按钮会生成启用(true)状态。
我希望将此功能称为"关闭表格B" (AddCstmrForm
)。
我试图通过接收此函数作为参数来解决这个目标:
public Void AddCstmrForm(Runnable myFunc) {
.....
....
}
问题:
但是在表单A(MainForm
)中,当我将函数LockOrUnlockButtons()
发送给表单B的构造函数(AddCstmrForm
)时,我得到了错误:
Constructor AddCstmrForm in class AddCstmrForm cannot be applied to given types.
required: no arguments.
founf: Void
我做错了什么?
Harel的
代码:
表格A中的,(MainForm
):
private void buttonAddNewCstmrCrdActionPerformed(java.awt.event.ActionEvent evt) {
AddCstmrForm addCstmr = null;
try
{
addCstmr = new AddCstmrForm(LockOrUnlockButtons());
}
catch (Exception ex)
{
Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
}
addCstmr.show();
}
private Void LockOrUnlockButtons() throws Exception
{
if(sngltn.GetAllCustemers().size()==0)
buttonUpdateAddActivityCstmrCrd.setEnabled(false);
else
buttonUpdateAddActivityCstmrCrd.setEnabled(true);
if(sngltn.GetAllCustemers().size()==0)
buttonDeleteCstmrCrd.setEnabled(false);
else
buttonDeleteCstmrCrd.setEnabled(true);
if(sngltn.GetAllCustemers().size()==0)
buttonQueriesViewData.setEnabled(false);
else
buttonQueriesViewData.setEnabled(true);
return null;
}
表格B中的 *(AddCstmrForm
):*
public class AddCstmrForm extends javax.swing.JFrame {
...............
.............
.........
private Runnable MainFormLockOrUnlockButton;
........
public Void AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
..............
..........
......
this.MainFormLockOrUnlockButton = myFunc;
return null;
}
..............
..........
......
}
答案 0 :(得分:3)
这不是构造函数:
public Void AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
这是一种名为AddCstmrForm
的方法,其返回类型为Void
。
我认为你的意思是:
public AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
您 还需要创建一个Runnable
来调用您的LockOrUnlockButtons
方法。例如:
AddCstmrForm addCstmr = new AddCstmrForm(new Runnable() {
@Override public void run() {
LockOrUnlockButtons();
}
});
除非你使用Java 8,否则你可以写:
AddCstmrForm addCstmr = new AddCstmrForm(this::LockOrUnlockButtons);
此外,您的LockOrUnlockButtons
可以大大简化:
private void LockOrUnlockButtons() throws Exception {
boolean anyCustomers = !sngltn.GetAllCustemers().isEmpty();
buttonUpdateAddActivityCstmrCrd.setEnabled(anyCustomers);
buttonDeleteCstmrCrd.setEnabled(anyCustomers);
buttonQueriesViewData.setEnabled(anyCustomers);
}
(我也强烈建议您遵循Java命名约定,使用返回类型void
而不是Void
,除非您确实需要,并避免{ {1}}。您应该通过事物的外观重新审视您的异常处理方法。)
答案 1 :(得分:1)
A" Runnable"不仅仅是一个任意的功能;它是实现Runnable接口的类的实例。坦率地说,您使用的语法非常具有创造性;但这完全是错误的。