Но у меня проблема, потому что я не могу отобразить кнопки, добавленные ранее
Почему вам нужно снова отображать кнопки? Если вы добавили их на панель, они не исчезнут, если у вас нет логина c для их удаления.
В любом случае, вы выполняли какую-либо отладку?
button.setBounds( xpos + mouseCoord[0] - size.width / 2, ypos +
mouseCoord[1] - size.height / 2, size.width , size.height );
Код, подобный приведенному выше, должен быть реструктурирован в нечто вроде:
int x = xpos + e.getX() - (size.width / 2);
int y = ypos + e.getY() - (size.height / 2);
button.setBounds(x, y, size.width, size.height);
Потому что теперь вы можете на самом деле добавьте некоторый код отладки, чтобы убедиться, что ваши расчеты верны:
System.out.println(x + " : " + y + " : " + size);
Код, подобный приведенному выше, будет проверять, что:
- вы фактически вызываете свой код зацикливания
- границы кнопки правильные
Я предполагаю, что расположение неправильное, а кнопки расположены друг над другом.
Я не понимаю эту логику c:
roundButton.setBounds ( insets.left + mouseCoord[0] - size.width / 2, insets.top + mouseCoord[1] - size.height / 2, size.width , size.height );
buttonTuples.add( new ButtonTuple(roundButton, mouseCoord[0], mouseCoord[1]));
Вы добавляете компонент сразу, а затем сохраняете другое местоположение в классе ButtonTuple.
Зачем вам даже нужны два последних параметра? Границы кнопки уже установлены.
Редактировать:
В дополнение ко всем вышеперечисленным предложениям, самая большая проблема заключается в том, что вам нужно создать новый экземпляр RoundButton:
roundButton = new RoundButton();
roundButton.setBounds(…);