95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
(() => {
|
|
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;
|
|
};
|
|
})();
|