Я сейчас работаю над 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 ();