【问题标题】:How do I create a custom floating Swing component without a JFrame?如何在没有 JFrame 的情况下创建自定义浮动 Swing 组件?
【发布时间】:2011-09-23 15:32:33
【问题描述】:

我想创建一个自定义的 swing 组件,例如不需要在屏幕上打印 JFrame(或扩展它)的桌面小部件。

我不想扩展 JFrame,因为我的组件非常简单,而且 JFrame 实现了很多我不需要的功能。

我该从谁开始?我应该扩展哪个课程?

非常感谢

编辑---------------------------

谢谢大家!

我会检查您发送的参考资料。 另外,java是否可以在没有swing API的情况下在屏幕上绘图?

【问题讨论】:

  • 你不需要什么功能?您可以在 JFrame 上调用 setUndecorated(true),但无论如何,您都需要一个容器对象来渲染您的组件!
  • 工具栏、菜单栏、子组件、拖动...
  • @Mikhas,然后听起来像在 JFrame 上调用该方法就可以完成这项工作,尽管我不明白“子组件”部分......无论如何,如果你想添加对您的框架进行更多自定义,请考虑阅读How to Create Translucent and Shaped Windows
  • 这是example
  • @trashgod,+1,优秀的 ole Java2D...非常酷!:)

标签: java swing uicomponents custom-component


【解决方案1】:

如果您不想要 JFrame 提供的功能而只想要浮动图形,请使用 JWindow。它没有窗户装饰。

JWindow 中的纯标签示例:

public static void main(String args[]) {
    JWindow w = new JWindow();
    w.add(new JLabel("Testing a Window!!!!!"));
    w.setLocation(300, 300);
    w.pack();
    w.setVisible(true);
}

【讨论】:

  • 嗯,我想你需要一个top-level container
  • @Trashgod,我假设您可以拥有一个不可见的框架作为窗口的所有者。不过我自己没试过。
  • @trashgod,你让我很好奇,所以我只是尝试添加了一个示例。 Window 确实需要一个所有者,但该所有者不需要是可见的。
  • @jzd 为什么是 AWT Containers,有什么特别的吗
  • @mKorbel,问题是如何避免 JFrame。并且想要扩展/使用功能较少的东西。这是一个奇怪的问题,但 Window 符合要求。
【解决方案2】:

取决于你需要什么。您可能只需要一个未装饰的 JFrame。我不太理解您关于“我不需要的所有功能”的论点,因为在不同的级别上,您无论如何都会得到它,无论是通过另一个组件还是通过底层操作系统。你无法摆脱它。

现在解决您的问题,您可以随时使用JDialog

【讨论】:

  • JFrame 在任务栏中留下一个按钮(不酷); (J)Window 通常是选择之一 (imo)
  • 是的,比 (J)Window 更好的是 JDialog 也不会将按钮留在任务栏中,并且仍然是顶级容器
  • JDialog w/o parent Frame 使用共享的swing frame(可以通过new JDialog().getParent()获取)
  • 目前还不清楚 OP 对 很多我不需要的功能意味着什么
【解决方案3】:

总而言之,您需要熟悉Java2D,正如@trashgod 的评论所示。特别是Composting Graphics。并且理解使用顶级容器来渲染 Swing 组件总是需要的。

注意

如果 @trashgod 提供了答案,我很乐意删除我的答案并相应地投票给他。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2010-11-13
    • 2010-10-23
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多