@Override
  public void fillInterface(JPanel mainPanel) {
    setUIDisplayEnabled(true);

    flickr = new PluginFlickrFrontend(APP_KEY);
    provider = new FlickrThumbnailProvider(flickr);

    // Random
    ButtonGroup bgRandomSource = new ButtonGroup();
    rbInterestingness = new JRadioButton("Interestingness");
    bgRandomSource.add(rbInterestingness);
    rbRecent = new JRadioButton("Recent");
    bgRandomSource.add(rbRecent);
    rbInterestingness.setSelected(true);

    btGrabRandom = new JButton("Grab");
    btGrabRandom.addActionListener(this);

    JPanel randomPanel =
        GuiUtil.createLineBoxPanel(
            rbInterestingness,
            Box.createHorizontalGlue(),
            rbRecent,
            Box.createHorizontalGlue(),
            btGrabRandom);
    randomPanel.setBorder(new TitledBorder("Random image"));

    // Search
    tfTag = new JTextField();
    tfTag.addKeyListener(
        new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            if (key == KeyEvent.VK_ENTER) {
              grab(FlickrWorker.TYPE_TAGS, tfTag.getText());
            }
          }
        });
    ComponentUtil.setFixedSize(tfTag, new Dimension(300, 25));
    btGrabByTag = new JButton("Grab");
    btGrabByTag.addActionListener(this);

    JPanel searchPanel = GuiUtil.createLineBoxPanel(tfTag, Box.createHorizontalGlue(), btGrabByTag);
    searchPanel.setBorder(new TitledBorder("Search image"));

    // Expert
    tfExpert = new JTextField();
    tfExpert.addKeyListener(
        new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            if (key == KeyEvent.VK_ENTER) {
              grab(FlickrWorker.TYPE_EXPERT, tfExpert.getText());
            }
          }
        });
    ComponentUtil.setFixedSize(tfExpert, new Dimension(300, 25));
    btGrabByExpertQuery = new JButton("Grab");
    btGrabByExpertQuery.addActionListener(this);

    JPanel expertPanel =
        GuiUtil.createLineBoxPanel(tfExpert, Box.createHorizontalGlue(), btGrabByExpertQuery);
    expertPanel.setBorder(new TitledBorder("Expert query"));

    // Log window
    taLog = new JTextArea();
    taLog.setEditable(false);
    taLog.setLineWrap(true);
    taLog.setColumns(35);
    taLog.setRows(10);
    JScrollPane taLogScroll = new JScrollPane(taLog);
    taLogScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    // Progress bar
    btHelp = new JButton(NherveToolbox.questionIcon);
    btHelp.setToolTipText("About this plugin");
    btHelp.addActionListener(this);
    tfMaxToGrab = new JTextField("100");
    ComponentUtil.setFixedSize(tfMaxToGrab, new Dimension(50, 25));
    cbSingleImage = new JCheckBox("Single");
    pbProgress = new JProgressBar();
    JPanel progressPanel =
        GuiUtil.createLineBoxPanel(btHelp, tfMaxToGrab, cbSingleImage, pbProgress);

    // Frame stuff
    int spacing = 10;
    JPanel myPanel =
        GuiUtil.createPageBoxPanel(
            Box.createVerticalGlue(),
            randomPanel,
            Box.createVerticalStrut(spacing),
            searchPanel,
            Box.createVerticalStrut(spacing),
            expertPanel,
            Box.createVerticalStrut(spacing),
            progressPanel,
            Box.createVerticalStrut(spacing),
            taLogScroll,
            Box.createVerticalGlue());
    mainPanel.add(myPanel);
  }