展示

Jupyter 前端的许多优点之一是对 display_data 的支持。IJava 与 基础内核 的高级渲染 API 接口。

Notebook 函数

Java 在用户空间注入了 2 个函数,用于显示数据:displayrender。大多数用例应该倾向于前者,但是 render 有一个必要的情况,下面将概述。此外,updateDisplay 函数可以用来更新一个先前显示的对象。所有这些都在运行时 Display 类中定义。

所有的显示/渲染函数在它们的输出中包括一个 text/plain 表示。默认情况下,这是 String.valueOf(Object) 值,但它可以被重写。

String display(Object o)

将一个对象显示为它的 preferred 类型。如果你不想要一个特定的类型,最好让对象决定它的最佳表现方式。

该对象被渲染并发布在显示流上。返回一个 ID,如果需要的话,可以用来 updateDisplay

String display(Object o, String... as)

显示一个对象为 requested 类型。在这种情况下,该对象试图被呈现为 as 中给出的所需的 mime 类型。但不保证,如果一个类型不被支持,它就不会出现在输出中。

该对象被渲染并发布在显示流上。返回一个 ID,如果需要的话,可以用来 updateDisplay

当一个类型有许多潜在的表现形式,但不是所有的都是首选时,这很有用。例如,一个 CharSequence 有许多表现形式,但只有 text/plain 是首选。要把它显示为可执行的 javascript,我们可以使用以下方法:

display("alert('Hello from IJava!');", "application/javascript");

因为有可能一些前端不支持给定的格式,所以可以给定很多,前端选择最好的。例如,要显示为 html 和 markdown:

display("<b>Bold</b>", "text/html", "text/markdown");

这将触发一个显示信息,其值为 text/htmltext/markdown 和隐含的 text/plain

DisplayData render(Object o)

Renders an object as it’s preferred types and returns it’s rendered format. Similar to display(Object o) but without publishing the result.

DisplayData render(Object o, String... as)

Renders an object as the requested types and returns it’s rendered format. Similar to display(Object o, String... as) but without publishing the result.

When expressions are the last code unit in a cell they are rendered with the render(Object o) semantics. If this is not desired it can be hijacked by wrapping it in a call to this function.

String md = "Hello from **IJava**";

render(md, "text/markdown")

This will result in the Out[_] result to be the pretty text/markdown representation rather than the boring text/plain representation.

void updateDisplay(String id, Object o)

Renders an object as it’s preferred types and updates an existing display with the given id to contain the new rendered object. Similar to display(Object o) but updates an existing displayed object instead of appending a new one.

void updateDisplay(String id, Object o, String... as)

Renders an object as it’s requested types and updates an existing display with the given id to contain the new rendered object. Similar to display(Object o, String... as) but updates an existing displayed object instead of appending a new one.

String id = display("<b>Countdown:</b> 3", "text/html");
for (int i = 3; i >= 0; i--) {
    updateDisplay(id, "<b>Countdown:</b> " + i, "text/html");
    Thread.sleep(1000L);
}
render("<b>Liftoff!</b>", "text/html")