В моем случае использования List<String>
передается Jpanel
, а для каждого String
в List
JPanel
отображает компонент пользовательского интерфейса. Этот компонент пользовательского интерфейса состоит из 3 кнопок, и мой текущий код для данного варианта использования выглядит следующим образом. -
Ниже следует код для компонента пользовательского интерфейса -
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();
}
}
Код отлично работает для всех Strings
в переданном List
. Я хочу, чтобы моя Panel воспринимала любые изменения, которые могут произойти с List
, такими как добавления или удаления, и соответственно добавляла / удаляла соответствующие соответствующие компоненты пользовательского интерфейса. Я думаю, что это можно сделать с помощью PropertyChangeListener, но я не смог учесть это в моем коде.
Любые идеи или предложения о том, как я могу сделать мой инструмент рендеринга / рендеринга Panel, как только будут внесены изменения в List
, будут полезны.