public SmallCardsViewer(DeckCreator parent) {
        super(JScrollPane.VERTICAL_SCROLLBAR_NEVER,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        this.parent = parent;

        swingWorker = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {
                JScrollBar b = SmallCardsViewer.this.getHorizontalScrollBar();
                while (!isCancelled()) {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException ex) {}
                    Point p;
                    if ((p = SmallCardsViewer.this.getMousePosition()) != null) {
                        int x = p.x;
                        int w = SmallCardsViewer.this.getSize().width;
                        int i = 0;
                        if (x < w / 12) {
                            i = -5;
                        } else if (x < w / 6 ) {
                            i = -4;
                        } else if (x < w / 3) {
                            i = -3;
                        } else if (x > 11 * w / 6) {
                            i = 5;
                        } else if (x > 5 * w / 6) {
                            i = 4;
                        } else if (x > 2 * w / 3) {
                            i = 3;
                        }
                        b.setValue(b.getValue() + Card.W * i / 15);
                    }
                }
                return null;
            }
        };

        cards = new ArrayList<>();
        panel = new JPanel(new GridLayout(1, 0));
        panel.setPreferredSize(new Dimension(0, Card.H));

        this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        this.setViewportView(panel);
        swingWorker.execute();
    }