public OnscreenKeyboardWindow(Window parent, String title) {
    super(parent);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    setTitle(title);

    JPanel p = (JPanel) getContentPane();
    p.setBackground(Config.get("keyboard.color.background", Color.BLACK));
    p.setOpaque(true);

    int gap = Config.get("keyboard.gap", 3);
    setLayout(new GridLayout(0, Config.get("keyboard.colums", 5), gap, gap));

    if (gap != 0) {
      p.setBorder(new EmptyBorder(gap, gap, gap, gap));
    }

    for (final String s : Config.getArray("keyboard.keys")) {
      KeyboardButton bt = new KeyboardButton(s);

      bt.addActionListener(
          new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
              for (KeyboardListener l : listener) {
                l.keyInserted(s);
              }
            }
          });

      add(bt);
    }

    fontSize = Config.get("keyboard.fontSize", 14);

    pack();
    setLocationRelativeTo(parent);
    AWTUtilitiesWrapper.setWindowOpacity(this, Config.get("keyboard.opacity", 80) / 100f);
  }