在Swing应用程序中,我有许多子面板,每个子面板都听一个JSlider.周围的父面板也会监听所有子面板.为了在下面的示例中获得一致的结果,我必须首先添加父级,然后添加本地侦听器.考虑到本文中规定EventListenerList和解释的顺序,这是有道理的.我可以依赖该订单,还是应该安排发送不同的活动?
class SubPanel extends JPanel implements ChangeListener {
private final JSlider slider = new JSlider();
private final JLabel label = new JLabel();
private final String name;
private float value;
public SubPanel(String name, float value, ChangeListener parent) {
this.name = name;
this.value = value;
...
slider.addChangeListener(parent);
slider.addChangeListener(this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
附录:讨论EventListenerList似乎是实施建议而不是保证.pstanton建议的链接方法更可靠地强制执行正确的顺序.例如,SubPanel的ChangeListener可以简单地将事件转发到父.
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
Run Code Online (Sandbox Code Playgroud) JDK 7为JColorChooser添加了一个新的透明度滑块:

问题是我不想让我的用户选择透明的颜色.不幸的是,似乎没有一种简单的方法来禁用滑块.
摆脱透明度的一种方法是仅根据所选颜色创建一种新颜色,但删除alpha值.然而,这给用户留下了错误的印象,因为滑块现在实际上什么都不做,我讨厌有一个无用的UI元素.
所以我的问题是,摆脱透明度滑块的最佳方法是什么?
PS:IMO,他们只是添加滑块并使其成为默认行为,这很奇怪.这可能会导致JDK 6程序中的许多错误,这些错误不希望颜色选择器返回带有alpha值的颜色.