gpt4 book ai didi

java - 在 Swing 中模拟这个 SWT Shell

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:38 27 4
gpt4 key购买 nike

我一直在使用 SWT(GUI lib Eclipse 使用),我想使用 Swing 创建以下内容。

enter image description here

前面的截图是通过下面的代码使用SWT完成的

public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display, SWT.RESIZE);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

我想知道,我怎么可能在 Swing 中模拟它?

P.S 这个 Shell 周围的边框目前是我的 windows 配色方案的原生边框,我不想只创建一个 MatteBorder 并模拟颜色,我想使用 windows 的原生边框。

最佳答案

那么问题来了:原生风格的带边框的窗口只能用Swing创建吗?
很快:不。很遗憾,使用 Swing 无法做到这一点。
另外:同样的“否”也适用于也可以使用 SWT 创建的工具窗口。

现在让我解释一下原因。

Swing 使用纯 Java 编写的渲染来绘制应用程序中的任何组件和自定义装饰。尽管 Swing 中的窗口装饰有点不同——默认情况下,JFrame 和 JDialog 使用 native 样式装饰——基本上当窗口实例是从 Java 应用程序在你的系统中创建时——该窗口被要求具有框架或对话框的默认装饰(加上一些其他可能的选择)。之后,此窗口用于在其上呈现 Swing 组件。但是 Swing 代码并不能真正控制系统提供的装饰,它只能打开/关闭它并在其中配置一些选项。不幸的是,您正在寻找的选项不存在 - 很可能没有实现,因为不是很受欢迎。

虽然 Swing 允许通过自定义 L&F(外观和感觉)自定义组件/窗口样式。 L&F 支持自定义窗口装饰,只是提供了自己的方式来绘制和控制窗口装饰。如果安装了这样的 L&F - Swing 默认使用未修饰的框架/对话框,并简单地要求 L&F 进行修饰。任何人都可以编写自己的 L&F,这意味着任何人都可以创建自定义装饰。

正如 @camickr 之前提到的,如果您想在 Swing 中创建这样的框架(如您帖子中的屏幕截图),您只有一个选择 - 使用 setUndecorated 设置为 true 的 JDialog/JFrame或默认情况下未修饰的 JWindow 并“通过绘制方式”。为所有绘画操作提供的 Graphics2D 将允许您为窗口创建任何自定义装饰,甚至是屏幕截图上的装饰。

我不会说谎 - 创建自定义窗口装饰非常困难 - 它需要大量的 Swing 知识和大量的编写代码,而不仅仅是绘制代码。所以我真的怀疑你会选择那个选项,除非你对 UI 创作充满热情。

最后 - 您必须在 SWT 和 Swing(甚至 JavaFX)之间做出选择,因为这些 UI 框架中的每一个都提供完全不同的功能和选项集。橱窗装饰只是大冰山一角。

编辑:从 JDK 7 开始,实际上可以创建工具窗口,您只需将窗口类型设置为 Window.Type.UTILITY。虽然仍然不可能创建一个只有原生边框而没有任何标题栏的窗口。

关于java - 在 Swing 中模拟这个 SWT Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815892/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com