Реализация пользовательского интерфейса свинга Java, скорее всего, с использованием PropertyChangeListener - PullRequest
1 голос
/ 15 марта 2012


Мой вариант использования выглядит следующим образом -
У меня есть список (ArrayList) объектов, пользовательских объектов данных.
Теперь я хочу отобразить или представить каждый из этих объектов данных в виде поля, содержащего 3 кнопки. Так что я бы имел n ящиков для n данных объектов данных в моем списке.

Я хочу, чтобы все эти «ящики» были сложены, скажем, в JTable.

Теперь, когда объект данных добавляется в вышеупомянутый список, я хочу, чтобы другой Box создавался, как упоминалось ранее, и добавлялся в JTable.

Я знаю, что это может быть достигнуто с помощью PropertyChangeListener, но я просмотрел некоторые статьи в Интернете, касающиеся PropertyChangeListener, но не смог получить четкую реализуемую идею.

Я новичок в создании пользовательских интерфейсов, и любая помощь с этим будет очень признательна.

1 Ответ

2 голосов
/ 15 марта 2012

Я бы порекомендовал обернуть вашу ArrayList в реализацию TableModel, при этом изменения в списке приведут к TableModelEvent.

В приведенном ниже примере базовый список инкапсулирован в реализации модели; единственный способ изменить его - вызвать addItem, который после изменения списка вызовет fireTableRowsInserted. Это приведет к запуску TableModelEvent и последующей обработке представлением JTable для этого экземпляра модели.

public class MyTableModel extends AbstractTableModel {
  private final List<MyItem> items = new ArrayList<MyItem>();

  public int getRowCount() {
    return items.size();
  }

  public int getColumnCount() {
    return 3;
  }

  public String getColumnName(int columnIndex) {
    switch(columnIndex) {
      case 0:
        return "foo";
      case 1:
        return "bar";
      case 2:
        return "qux";
      default:
        assert false : "Invalid column index: " + columnIndex;
    }
  }

  public void addItem(MyItem item) {
    items.add(item);
    fireTableRowsInserted(items.size() - 1, items.size() - 1);
  }
}
...