public void setPiece(GamePiece piece) { inUseModel.clear(); while (piece instanceof Decorator) { final Class<?> pieceClass = piece.getClass(); inUseModel.insertElementAt(piece, 0); boolean contains = false; for (int i = 0, j = availableModel.size(); i < j; ++i) { if (pieceClass.isInstance(availableModel.elementAt(i))) { contains = true; break; } } if (!contains) { try { availableModel.addElement(pieceClass.getConstructor().newInstance()); } catch (Throwable t) { ReflectionUtils.handleNewInstanceFailure(t, pieceClass); } } piece = ((Decorator) piece).piece; } if (piece == null) { inUseModel.insertElementAt(new BasicPiece(), 0); } else { inUseModel.insertElementAt(piece, 0); } inUseList.setSelectedIndex(0); refresh(); }