私のユースケースは、List<String>
がJpanel
に渡され、List
の各String
ため、JPanel
がUIコンポーネントを描画することです。このUIコンポーネントは3つのボタンで構成されています。私の使用例の現在のコードは次のとおりです。 -
「UIコンポーネント」のコードは、次の -JavaのSwingは - JPanelのとのPropertyChangeListener
public class MacroEditorEntity implements ActionListener {
private String macro;
private JButton upButton;
private JButton downButton;
private JButton MacroDetailsButton;
public MacroEditorEntity(String macro) {
this.macro = macro;
upButton = new JButton("Up");
downButton = new JButton("Down");
MacroDetailsButton = new JButton(macro);
upButton.addActionListener(this);
downButton.addActionListener(this);
MacroDetailsButton.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getSource().equals(MacroDetailsButton))
{
System.out.println(macro);
}
}
public JButton GetUpButton()
{
return upButton;
}
public JButton GetDownButton()
{
return downButton;
}
public JButton getMacroDetailsButton()
{
return MacroDetailsButton;
}
}
私のパネルのためのコードは次のようである -
public class MacroEditor extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private List<String> stringlist;
public MacroEditor(List<String> list) {
this.stringlist = list;
setupComponents();
validate();
setVisible(true);
}
public void setupComponents()
{
Box allButtons = Box.createVerticalBox();
for(String string : stringlist)
{
MacroEditorEntity entry = new MacroEditorEntity(string);
Box entryBox = Box.createHorizontalBox();
entryBox.add(entry.GetUpButton());
entryBox.add(Box.createHorizontalStrut(15));
entryBox.add(entry.getMacroDetailsButton());
entryBox.add(Box.createHorizontalStrut(15));
entryBox.add(entry.GetDownButton());
allButtons.add(entryBox);
}
add(allButtons);
}
@Override
public void propertyChange(PropertyChangeEvent arg0) {
revalidate();
repaint();
}
}
コードが渡されList
内のすべてのStrings
のために正常に動作します。私は、追加または削除のようなList
に起こりうる変更をピックアップし、それに応じて対応する対応するUIコンポーネントを追加/削除したいと考えています。私はこれがPropertyChangeListenerを使用して行うことができると思うが、私のコードでそれを説明することができませんでした。
List
が変更されるとすぐにパネルレンダリング/再レンダリングを行う方法に関するアイデアや提案は役に立ちます。
Javaの命名規則を学んでください。 – kleopatra