Я пытаюсь создать приложение GUI, где я использую 2-мерный массив, зарегистрированный в ActionListener. Во время компиляции я получаю ошибку String s = ((Button)o).getLabel(); declaration not valid here.
. В моем приложении, если вы нажмете кнопку, каждая метка «x» на кнопке должна переключиться на «o». Код я использовал:Java event handler String error
из конструктора
public ArrayDemo2()
{
setLayout(new GridLayout(3,3));
b= new Button[3][3];
for(int i=0; i<b.length; i++)
{
for(int j=0; j<b[i].length; j++)
{
if(Math.random() < 0.5) add(b[i][j] = new Button("X"));
else add(b[i][j] = new Button("O"));
b[i][j].addActionListener(this);
}
}
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
setSize(600,600);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object o = e.getSource();
String s = "";
if(o instanceof Button)
{
s = ((Button)o).getLabel();
}
if(s.equals("X"))
((Button)o).setLabel("O");
else
((Button)o).setLabel("X");
}
Как уже было сказано в некоторых ответах. Брекеты решают проблему с компилятором. В общем случае всегда указывайте в фигурных скобках однострочное выражение if и while. Он визуально группирует логику и позволяет избежать добавления другой строки кода и ошибочно полагает, что она захвачена условием. – eclipz905
'if (o instanceof Button) { Кнопка b = (кнопка) o; b.setLabel (b.getLabel(). Equals ("X")? "O": "X"); } ' – vaxquis