ошибка: не удается найти символ в ActionLearner - PullRequest
0 голосов
/ 06 мая 2020

Я сейчас работаю над GUI, и у меня есть массив Jbutton. У меня также есть еще один массив информации, который нужно вставить в каждую кнопку Jbutton. Поэтому, когда я нажимаю кнопку, я попадаю в новое всплывающее окно, но я хочу, чтобы всплывающее окно выводило только информацию, специально предназначенную для этой кнопки Jbutton. Я не знаю, как это сделать. Ниже приведен фрагмент моего сценария. Очень надеюсь, что найдется кто-нибудь, кто поможет мне с этим. Простите меня, так как я не слишком уверен, как я могу это сформулировать, и если есть какие-то сомнения, я могу объяснить дальше. (** i c ** и ** s ** предназначены для выделения двух переменных жирным шрифтом, я не слишком уверен, почему он не выделен жирным шрифтом)

jbArray = new JButton [pArray.length];
    for (int i = 0; i < pArray.length ; i++)
    {
        defaultpic = new ImageIcon("default.jpg");
        rolloverpic = new ImageIcon("coloured.jpg");

        jbArray[i]= new JButton (pArray[i].getbuttonName(),defaultpic);
        jbArray[i].setRolloverIcon(rolloverpic);
        add (jbArray[i]); 
    }

    // Register the events to each button 
    for (int i = 0; i < jbArray.length; i++)
    {
        jbArray[i].addActionListener (new SButtonClass (pArray[i].getbuttonName()));
        ImageIcon **ic** = pArray[i].getimageFile();
        String **s** = pArray[i].toString();    
    }
     //----------------------End of Student Buttons ----------------------
}

private class SButtonClass implements ActionListener{

    @Override 
    public void actionPerformed  (ActionEvent e)
    {
        if (e.getSource () == questionBox);

        String str = **s** + questionBox.getText();

        Icon studentdp = new ImageIcon (**ic**);

        JOptionPane.showMessageDialog(null, str, "Welcome to Chat Room", JOptionPane.INFORMATION_MESSAGE, studentdp);
    }
}

обновление: я удалил класс SButtonclass и настроил новый код SButtonClass:

for (int i = 0; i < jbArray.length; i++)
{
        jbArray[i].addActionListener((e) -> {
            String str = pArray[i].toString() + questionBox.getText();
            Icon studentdp = new ImageIcon (pArray[i].getimageFile());
            JOptionPane.showMessageDialog(null, str, "Welcome to Chat Room", JOptionPane.INFORMATION_MESSAGE, studentdp);
        });
    }

, однако я сталкиваюсь с новой ошибкой: «локальные переменные, на которые ссылается лямбда-выражение, должны быть окончательными или фактически окончательными». локальная переменная со ссылкой на i в этом операторе String str = pArray [i] .toString () + questionBox.getText ();

...