我有以下代码:
import javax.swing.*;
public class myclass
{
private static JButton b1;
public static void doSomething()
{
b1 = new JButton("test");
}
public static void hideButton()
{
b1.setVisible(false);
}
}
这没有JFrame
和其他,但基本上我的问题是:
从b1.setVisible()
致电doSomething()
。但是,从hideButton()
这样做,我的IDE告诉我找不到JButton
的方法。
我的想法是我必须在构造函数中声明JButton
,但是我可以按照我在代码示例中说明的方式使其工作吗?
答案 0 :(得分:-1)
您使用的语法不完整。这就是你的addActionListener-Part应该是这样的:
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
b1.setVisible(false);
}
});
你省略了包含分号的右括号。
);
答案 1 :(得分:-1)
好的,现在我看到了问题。我不知道你是怎么做或为什么做的,但你所有的actionPerformed-methods都有以下签名:
actionPerformed(ActionEvent b1)
这会导致你的按钮b1在方法actionPerformed()中不可见。 Java现在认为ActionEvent b1是有意义的,而ActionEvent肯定没有setVisible()方法。 ;)
您尝试使用
绕过此功能this.b1.setVisible(false);
但是这不起作用,因为ActionListener是一个所谓的匿名内部类。并且由于在内部类中调用“this”意味着调用类ActionListener本身。 ActionListener也没有成员b1。
请在下面找到更正的方法。
b1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
try
{
b1.setVisible(false);
// sc.setFile(filename.getText());
}
catch(Exception e)
{
}
}
});
但请注意,您必须在整个班级中更改所有ActionListener。你必须替换“ActionEvent b1”。并且不要使用“ActionEvent e”作为参数,因为这与try / catch块中的“Exception e”冲突。
Ich hoffe ich konnte Dir damit helfen。 Bei mir meckert der Compiler jedenfalls nicht mehr rum。 ; O)