解决常见组件问题
本节讨论使用组件时可能遇到的问题。如果在本节中找不到问题,请查阅以下各节:
问题: 我在实现模型时遇到麻烦(或与 Java SE Platform Standard Edition 中已经存在的某些其他代码相似)。
- 查看 Java SE 源代码。它与 JDK 一起分发,是查找实现模型,触发事件等代码示例的重要资源。
问题: 每当我的文本字段中的文本更新时,文本字段的大小都会更改。
- 您应该通过指定应显示空间的列数来指定文本字段的首选宽度。为此,可以使用
JTextField
构造函数的int
参数或setColumns
方法。
问题: 内容窗格的某些区域重新粉刷时看起来很奇怪。
-
如果设置内容窗格,请确保它是不透明的。您可以通过在内容窗格上调用
setOpaque(true)
来做到这一点。请注意,尽管JPanel
在大多数外观上都是不透明的,但在 GTK 外观上却并非如此。有关详情,请参见将组件添加到内容窗格。 -
如果您的一个或多个组件执行自定义绘制,请确保正确实现了它。请参阅解决常见的绘画问题以获取帮助。
-
您可能遇到线程安全问题。请参阅下一个条目。
问题: 我的程序表现出奇怪的症状,有时似乎与计时有关。
- 确保您的代码是线程安全的。有关详情,请参见Swing 中的并发。
问题: 我的模态对话框在其他窗口后面消失了。
-
如果对话框的父组件为空,请在创建对话框时将其设置为有效的框架或组件。
-
此错误已在 6.0 版本中修复。有关更多信息,请参见4255200。
问题: 滚动条策略似乎不像所宣传的那样起作用。
-
一些 Swing 版本在
VERTICAL_SCROLLBAR_AS_NEEDED
和HORIZONTAL_SCROLLBAR_AS_NEEDED
策略的实现中包含错误。如果对您的项目可行,请使用最新版本的 Swing。 -
如果滚动窗格的 Client 端可以动态更改大小,则程序应设置 Client 端的首选大小,然后在 Client 端上调用
revalidate
。 -
确保为预期的方向指定了预期的策略。
问题: 我的滚动窗格没有滚动条。
-
如果要一直显示滚动条,请为滚动条策略指定
VERTICAL_SCROLLBAR_ALWAYS
或HORIZONTAL_SCROLLBAR_ALWAYS
。 -
如果希望滚动条根据需要显示,并且要在创建滚动窗格时强制需要滚动条,则有两种选择:设置滚动窗格或其容器的首选大小,或实现滚动-savvy 类,并从
getPreferredScrollableViewportSize
方法返回小于组件的标准首选大小的值。有关信息,请参阅调整滚动窗格的大小。
问题: 我的拆分窗格中的分隔线没有移动!
- 您需要在拆分窗格中设置至少一个组件的最小大小。有关信息,请参阅放置分频器并限制其范围。
问题: JSplitPane
的setDividerLocation
方法不起作用。
- 如果拆分窗格没有大小,则
setDividerLocation(double)
方法无效(如果尚未显示在屏幕上,则通常为 true)。您可以使用setDividerLocation(int)
或指定拆分窗格包含的组件的首选大小以及拆分窗格的调整大小权重。有关信息,请参阅放置分频器并限制其范围。
- 如果嵌套拆分窗格,则边界会累积-内部拆分窗格的边界显示在外部拆分窗格的边界旁边,从而导致边框看起来更宽。当嵌套许多拆分窗格时,该问题特别明显。解决方法是将放置在另一个拆分窗格中的任何拆分窗格上的边框设置为 null。有关信息,请参阅 Java 错误数据库中的错误#4131528。
问题: 我的工具栏中的按钮太大。
- try减少按钮的边距。例如:
button.setMargin(new Insets(0,0,0,0));
Problem:我的分层窗格中的组件未正确分层。实际上,这些层似乎是相反的-深度越小,组件越高。
- 如果将组件添加到分层窗格中时使用
int
而不是Integer
,则会发生这种情况。若要查看会发生什么,请在LayeredPaneDemo
类中进行更改layeredPane.add(label, new Integer(i));
tolayeredPane.add(label, i);
.
问题: 方法调用colorChooser.setPreviewPanel(null)
并未按预期删除颜色 selectors 的预览面板。
null
参数指定默认的预览面板。要删除预览面板,请指定一个没有尺寸的标准面板,例如:colorChooser.setPreviewPanel(new JPanel());