2014-11-21 3 views
-1

Я пытаюсь создать приложение 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"); 

    } 
+1

Как уже было сказано в некоторых ответах. Брекеты решают проблему с компилятором. В общем случае всегда указывайте в фигурных скобках однострочное выражение if и while. Он визуально группирует логику и позволяет избежать добавления другой строки кода и ошибочно полагает, что она захвачена условием. – eclipz905

+0

'if (o instanceof Button) { Кнопка b = (кнопка) o; b.setLabel (b.getLabel(). Equals ("X")? "O": "X"); } ' – vaxquis

ответ

0

Вы не можете объявить новую строку внутри, если заявление без скобок.

Вы должны были бы написать:

if(o instanceof Button) { 
    String s = ((Button)o).getLabel(); 
} 

Что на самом деле не имеет смысла, так как строка выходит из области видимости сразу. Что вы, возможно, хотите, это примерно так:

String s = ""; 
if(o instanceof Button) { 
    s = ((Button)o).getLabel(); 
} 
+0

Не работает. Он показывает несовместимый тип во время регистрации события –

+0

Ничто в коде, который вы отправили, не регистрирует какое-либо событие, поэтому я предполагаю, что проблема связана с кодом, который вы не опубликовали в вопросе. Это должно решить сообщение об ошибке «Объявление недействительно здесь», о котором вы спрашивали. –

+0

, пожалуйста, проверьте, что я редактировал свой код. –