javax.swing.JPanel
呼び出されたcalcResPanel
( java.awt.GridLayout
with列と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);