У меня есть javax.swing.JPanel
, называемый calcResPanel
(использующий java.awt.GridLayout
со столбцом 1
и неопределенными (0
) строками), который должен принимать и отображать набор BHSelectableLabel
с (которые расширяются javax.swing.JTextField
) вместе представляют текст, хранящийся в списке String
с именем results
.Я подумал, что мог бы также дать ему следующее поведение:
- В первый раз, он будет добавлять только новые
- В следующий раз, он будет:
- Измените текст как можно большего количества уже добавленных меток, чтобы он соответствовал как можно большему числу значений в
results
, насколько это возможно - Если остались какие-либо метки, которые не были изменены, удалите их,так как они не нужны.Иначе, добавьте столько новых ярлыков, сколько необходимо.
Это имеет смысл для меня. Если этот алгоритм не тот, что я должен делать, тогда прекратите чтение и опубликуйте ответ с лучшим алгоритмом. Однако, если вы согласны, то скажите мне, что я сделал не так с моим кодом:
int i, r, l;
for (i=0, r = results.length(), l = calcResPanel.getComponentCount(); i < r; i++)
if (i < l)
((BHSelectableLabel)calcResPanel.getComponent(i)).setText(results.get(i));
else
calcResPanel.add(new BHSelectableLabel(results.get(i)));
for (;i < l; i++)//If there are excess, unused lables, remove them
calcResPanel.remove(i);
Проблема с этим кодом в том, что он непоследовательно оставляет лишние метки в calcResPane
.Если вы думаете, что этот алгоритм хорош в концепции, то, пожалуйста, скажите мне что не так с моим кодом, который заставляет его оставлять лишние метки?
Ответ
Такойпростой ответ тоже.Я чувствую себя таким умным ^^;
int i, r, l;
for (i=0, r = results.length(), l = calcResPanel.getComponentCount(); i < r; i++)
if (i < l)
((BHSelectableLabel)calcResPanel.getComponent(i)).setText(results.get(i));
else
calcResPanel.add(new BHSelectableLabel(results.get(i)));
for (;i < l; i++)//If there are excess, unused lables, remove them
calcResPanel.remove(r);