JButton - 找不到setVisible()

时间:2017-04-21 17:13:57

标签: java swing jbutton

我有以下代码:

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,但是我可以按照我在代码示例中说明的方式使其工作吗?

2 个答案:

答案 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)