使用其他 Swing 功能解决常见问题

问题: 我的应用程序没有显示我通过UIManager.setLookAndFeel请求的外观。

您可能将外观设置为无效的外观,或者在 UI管理 器加载默认外观之后进行了设置。如果您确定指定的外观是有效的,并且设置外观是您的程序要做的第一件事(例如,在其主要方法的顶部),请检查是否有引用 Swing 的静态字段。类。如果未指定默认外观,则此引用可以导致加载默认外观。有关更多信息,包括如何在创建 GUI 后设置外观,请参见外观和感觉部分。

问题: 为什么我的组件无法获得焦点?

  • 您创建的是自定义组件(例如JComponent的直接子类)吗?如果是这样,则可能需要为您的组件提供 ImportingMap 和鼠标侦听器。有关更多信息和演示,请参见如何使自定义组件具有焦点

  • 组件是否在JWindow对象内?焦点系统要求JWindow拥有的框架对于JWindow对象中的任何组件都可见,以获取焦点。默认情况下,如果未为JWindow对象指定所有权框架,则会为其创建一个不可见的所有权框架。解决方案是在创建JWindow对象时指定可见且可聚焦的拥有框架,或者改用JDialogJFrame对象。

问题: 为什么当用户按下 Escape 键时,对话框无法接收到生成的事件?

如果您的对话框包含一个文本字段,则可能正在占用该事件。

  • 如果要获取 Escape 事件,而不管组件是否消耗它,则应使用KeyEventDispatcher

  • 如果只想在组件未使用 Escape 事件时获取它,则可以使用WHEN_IN_FOCUSED_WINDOWImportingMap 在JDialog对象中的任何JComponent组件上注册键绑定。有关更多信息,请参见如何使用键绑定页。

问题: 为什么我不能将 Swing 组件应用于任务栏图标? TrayIcon类的当前实现支持PopupMenu组件,但不支持其 Swing 副本JPopupMenu。此限制使使用其他 Swing 功能(例如,菜单图标)的功能变窄。请参阅错误 ID 6285881

  • 将创建一个新的JTrayIcon类来消除这种不便。在此之前,请使用 AWT 组件添加菜单项,复选框菜单项或子菜单。

如果您在本节中未找到问题,请咨询解决常见组件问题