【发布时间】:2017-12-19 10:35:52
【问题描述】:
我们的 Java 产品有一个主要的JToolBar,从某个点开始,几个后台线程可以添加新的 JButton,从最右边开始,作为警报,根据他们例程中遇到的一些条件。
所以,我们的主框架有这样一个私有属性:
private final Component featuresHorizontalGlue = Box.createHorizontalGlue();
当警报线程刷新时,它们首先调用
private synchronized void manageHorizontalGlue(boolean toBeAdded) {
if (toBeAdded) {
if (SwingUtilities.getAncestorOfClass(toolbar.getClass(), featuresHorizontalGlue) == null) {
logger.debug("Adding Horizontal Glue to main ToolBar");
toolbar.toolbar.add(featuresHorizontalGlue);
}
}
}
因为HorizontalGlue 组件应该是唯一的,所以后面添加的每个报警按钮都会右对齐。
第一次在工具栏中添加警报按钮时会调用类似的方法,然后在图标中简单地刷新它们。
无论如何,我的一位前同事实施了一些方法,如果满足其他一些条件,主工具栏将被完全释放和重新创建。
因此,我希望我的警报方法可以正常工作,但它们不能正常工作,因为即使在 toolbar 上调用了一个新的构造函数,然后 getAncestorOfClass() 返回不为空,因此不会重新添加水平粘合和警报按钮并不再显示.
为什么这个?
如果我在 Eclipse 上通过调试检查工具栏内的 Components[] 数组,我将无法再看到这些按钮和 HorizontalGlue 组件。那么,为什么该方法不返回 null 呢?
【问题讨论】:
-
我们无法回答您的问题,因为我们看不到您的代码。请提供一个简短的可运行示例 (SSCCE),以便我们也可以重现您的问题并对其进行调试以找到解决方案。
-
对不起,但我只是想知道如果我误解了任何内容,`getAncestorOfClass()` 是如何工作的。恐怕要给出一个简短的可运行示例并不简单,因为我目前正在使用的包非常大,并且有很多类和方法导致......工具栏也非常复杂。对不起。
标签: java swing user-interface jbutton jtoolbar