feat: add components

This commit is contained in:
2025-04-04 17:19:07 +08:00
parent 6f494ec9ca
commit c37b9f0ab2
40 changed files with 2088 additions and 0 deletions

View File

@@ -0,0 +1,94 @@
(() => {
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;
};
})();