(() => { var JFrame = javax.swing.JFrame; var JLabel = javax.swing.JLabel; var JPanel = javax.swing.JPanel; var JButton = javax.swing.JButton; var JTextArea = javax.swing.JTextArea; var JScrollPane = javax.swing.JScrollPane; var Frame = java.awt.Frame; var Toolkit = java.awt.Toolkit; var BorderLayout = java.awt.BorderLayout; var WindowListener = java.awt.event.WindowListener; var Proxy = java.lang.reflect.Proxy; var CountDownLatch = java.util.concurrent.CountDownLatch; try { //javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName()); } catch (e) { /* IGNORE */ } function FutureResult() { this.result = null; this.countDown = new CountDownLatch(1); } FutureResult.prototype.set = (result) => { this.result = result; this.countDown.countDown(); }; FutureResult.prototype.get = () => { this.countDown.await(); return this.result; }; showWindow = (title, text, message, editable) => { // GLOBAL var result = new FutureResult(); var f = new JFrame(title || "Hatter's Frame"); f.addWindowListener(Proxy.newProxyInstance( Proxy.class.getClassLoader(), [WindowListener.class], (proxy, method, args) => { if (method && method.name == "windowClosing") { f.setVisible(false); f.dispose(); result.set(null); } } )); var text = new JTextArea(text || "", 30, 80); text.setWrapStyleWord(true); text.setLineWrap(true); text.setEditable(!!editable); var textScrollPane = new JScrollPane(text); var label = new JLabel(message || "This is default message!"); var btnOK = null; if (editable) { btnOK = new JButton("OK!"); btnOK.addActionListener(() => { var t = text.getText(); f.setVisible(false); f.dispose(); result.set(t); }); } var btnCancel = new JButton("Cancel"); btnCancel.addActionListener(() => { f.setVisible(false); f.dispose(); result.set(null); }); var pane = new JPanel(); if (btnOK != null) { pane.add(btnOK); } pane.add(btnCancel); f.getContentPane().add(label, BorderLayout.NORTH); f.getContentPane().add(pane, BorderLayout.SOUTH); f.getContentPane().add(textScrollPane, BorderLayout.CENTER); f.pack(); var dim = Toolkit.getDefaultToolkit().getScreenSize(); f.setLocation((dim.width / 2) - (f.getSize().width / 2), (dim.height / 2) - (f.getSize().height / 2)); f.setVisible(true); return result; }; })();