我的代码是:
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);
}
之类的内容,但我无法弄清楚如何在这种情况下使用它。
答案 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
,但这根据您设置代码的方式不起作用。相反,您需要制作circle
和machine
个实例字段,以便能够在ActionListener
上下文中访问它们