javascript - 使用 JXA 以编程方式创建和填充 NSWindow

标签 javascript macos cocoa osx-yosemite javascript-automation

我最近了解到存在用于自动化的 JavaScript。对我来说更有趣的是调用 Objective-C API 的能力,在 JavaScript 中子类化 Objective-C 类,以及将 JavaScript 实现的子类的对象传递回使用父类作为接口(interface)定义的 Objective-C API 的能力。

我最大的问题是我并不完全了解 Objective-C,而我知道这一点。这就是我为此使用 JXA 的部分原因(主要原因是我发现您甚至可以使用 JavaScript 来完成这一切自动化非常有趣。)

我也不知道 Cocoa API,但我正在尝试通过 JXA 学习它。

那么,我将如何使用 JXA 创建和填充 JavaScript 窗口?

我目前的代码是:

ObjC.import('Cocoa');

var frame = $.NSMakeRect(100, 100, 200, 200);
var styleMask = $.NSMiniaturizableWindowMask |
                $.NSClosableWindowMask | 
                $.NSTitledWindowMask;

var rect = $.NSWindow.contentRectForFrameRect = frame;
rect.styleMask = styleMask;

var window = $.NSWindow.alloc.initWithContentRect = rect;
window.styleMask = styleMask;
window.setBackgroundColor = $.NSColor.blueColor;

除了 Apple 随 JXA 文档提供的有关 Objective-C 绑定(bind)的代码片段外,几乎没有其他示例。

那么有人可以告诉我如何使用 JXA 设计一个基本窗口,也许还有一个标签、文本框和按钮吗?

最佳答案

可以找到一个很好的教程here

ObjC.import("Cocoa");

var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask;
var windowHeight = 85;
var windowWidth = 600;
var ctrlsHeight = 80;
var minWidth = 400;
var minHeight = 340;
var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer(
  $.NSMakeRect(0, 0, windowWidth, windowHeight),
  styleMask,
  $.NSBackingStoreBuffered,
  false
);

var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24));
textFieldLabel.stringValue = "Image: (jpg, png, or gif)";
textFieldLabel.drawsBackground = false;
textFieldLabel.editable = false;
textFieldLabel.bezeled = false;
textFieldLabel.selectable = true;

var textField = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 60), 205, 24));
textField.editable = false;

var btn = $.NSButton.alloc.initWithFrame($.NSMakeRect(230, (windowHeight - 62), 150, 25));
btn.title = "Choose an Image...";
btn.bezelStyle = $.NSRoundedBezelStyle;
btn.buttonType = $.NSMomentaryLightButton;

window.contentView.addSubview(textFieldLabel);
window.contentView.addSubview(textField);
window.contentView.addSubview(btn);

window.center;
window.title = "Choose and Display Image";
window.makeKeyAndOrderFront(window);

关于javascript - 使用 JXA 以编程方式创建和填充 NSWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555933/

相关文章:

Python 操作系统模块错误

swift - 我的项目中需要 'override func didReceiveMemoryWarning() {}' 吗?

cocoa : Scale Image dragged into an ImageWell

javascript - 在这种情况下使用对象解构的正确方法是什么?

javascript - 根据 id 比较两个数组并根据值返回一个新数组

javascript - 如何将 $.each 循环中的结果相加?

ios - 如何以编程方式检查 iCloud Drive 是否已激活

javascript - 数据表 - 根据所选选项动态显示/隐藏列组

macos - Mac 上的 Python 3 setuptools

cocoa - 更新 NSOutlineView 项目