/**
   * Creates an information panel that shows the given texts and images, and an "OK" button.
   *
   * @param freeColClient The <code>FreeColClient</code> for the game.
   * @param texts The texts to be displayed in the panel.
   * @param fcos The source <code>FreeColObject</code> for the text.
   * @param images The images to be displayed in the panel.
   */
  public InformationPanel(
      FreeColClient freeColClient, String[] texts, FreeColObject[] fcos, ImageIcon[] images) {
    super(freeColClient, new MigLayout("wrap 1, insets 200 10 10 10", "[510]", "[242]20[20]"));

    final SwingGUI gui = getGUI();
    JPanel textPanel = new MigPanel();
    textPanel.setOpaque(false);
    textPanel.setLayout(new MigLayout("wrap 2", "", "top"));
    for (int i = 0; i < texts.length; i++) {
      if (images != null && images[i] != null) {
        textPanel.add(new JLabel(images[i]));
        textPanel.add(
            Utility.getDefaultTextArea(
                texts[i], new Dimension(475 - images[i].getIconWidth(), 185)));
      } else {
        textPanel.add(Utility.getDefaultTextArea(texts[i], new Dimension(475, 185)), "skip");
      }
      StringTemplate disp = displayLabel(fcos[i]);
      if (disp == null) continue;
      JButton button =
          Utility.localizedButton(
              StringTemplate.template("informationPanel.display")
                  .addStringTemplate("%object%", disp));
      final FreeColObject fco = fcos[i];
      button.addActionListener(
          (ActionEvent ae) -> {
            gui.displayObject(fco);
          });
      textPanel.add(button, "skip");
    }

    JScrollPane scrollPane =
        new JScrollPane(
            textPanel,
            JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    // correct way to make scroll pane opaque
    scrollPane.getViewport().setOpaque(false);
    scrollPane.setBorder(null);
    setBorder(null);

    add(scrollPane);
    add(okButton, "tag ok");
  }