当按下另一个Jbutton时,在java中禁用Jbutton

时间:2015-05-28 05:29:44

标签: java jframe

我的代码是:

  pGlobalContainer->getAction()->DoSomeActionOnlyForA()
    or
     pGlobalContainer->getAction()->DoSomeActionOnlyForB()

这是一个构造函数。该类扩展了JFrame

public FactoryWindow()
{
    getPreferredSize();
    setTitle("Bounce");
    JPanel buttonPanel = new JPanel();
    add(comp, BorderLayout.CENTER);
    addButton(buttonPanel, "Circle", new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                comp.addShape();
            }
        });
    addButton(buttonPanel, "Machine", new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                comp.addMachine();

            }
        });
    addButton(buttonPanel, "Close", new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                System.exit(0);
            }
        });
    add(buttonPanel, BorderLayout.SOUTH);
    pack();
}

我希望能够在按下机器按钮时禁用“形状”按钮

我该怎么做呢?

我知道有public void addButton(Container c, String title, ActionListener listener) { JButton button = new JButton(title); c.add(button); button.addActionListener(listener); } 之类的内容,但我无法弄清楚如何在这种情况下使用它。

1 个答案:

答案 0 :(得分:1)

您需要引用您尝试禁用的按钮,这将要求您稍微更改代码......

首先,您需要使用addButton方法返回其创建的按钮...

public JButton addButton(Container c, String title, ActionListener listener) {
    JButton button = new JButton(title);
    c.add(button);
    button.addActionListener(listener);
    return button;
}

然后你需要将结果分配给变量......

JButton cirlce = null;
JButton machine = null;

cirlce = addButton(buttonPanel, "Circle", new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        comp.addShape();
    }
});

然后您可以从ActionListener ...

访问它
machine = addButton(buttonPanel, "Machine", new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        comp.addMachine();
        circle.setEnabled(false);
    }
});

现在,如果您使用的是Java 6(我认为是Java 7),它会抱怨该按钮应该是final,但这根据您设置代码的方式不起作用。相反,您需要制作circlemachine个实例字段,以便能够在ActionListener上下文中访问它们