Wak*_*iko 8 java swing transparency java-7 jcolorchooser
JDK 7为JColorChooser添加了一个新的透明度滑块:

问题是我不想让我的用户选择透明的颜色.不幸的是,似乎没有一种简单的方法来禁用滑块.
摆脱透明度的一种方法是仅根据所选颜色创建一种新颜色,但删除alpha值.然而,这给用户留下了错误的印象,因为滑块现在实际上什么都不做,我讨厌有一个无用的UI元素.
所以我的问题是,摆脱透明度滑块的最佳方法是什么?
PS:IMO,他们只是添加滑块并使其成为默认行为,这很奇怪.这可能会导致JDK 6程序中的许多错误,这些错误不希望颜色选择器返回带有alpha值的颜色.
根据文档,可以仅修改/配置现有的类。因此,推荐的方法是创建自己的ChooserPanels(它们需要扩展AbstractColorChooserPanel),然后调用
JColorChooser jc = new JColorChooser();
jc.setChooserPanels(new AbstractColorChooserPanel[]{yourChooserPanel});
Run Code Online (Sandbox Code Playgroud)
另外,如果您正在寻找更快/更简单/更丑陋的方法,请为您编写以下代码:
private static void removeTransparencySlider(JColorChooser jc) throws Exception {
AbstractColorChooserPanel[] colorPanels = jc.getChooserPanels();
for (int i = 1; i < colorPanels.length; i++) {
AbstractColorChooserPanel cp = colorPanels[i];
Field f = cp.getClass().getDeclaredField("panel");
f.setAccessible(true);
Object colorPanel = f.get(cp);
Field f2 = colorPanel.getClass().getDeclaredField("spinners");
f2.setAccessible(true);
Object spinners = f2.get(colorPanel);
Object transpSlispinner = Array.get(spinners, 3);
if (i == colorPanels.length - 1) {
transpSlispinner = Array.get(spinners, 4);
}
Field f3 = transpSlispinner.getClass().getDeclaredField("slider");
f3.setAccessible(true);
JSlider slider = (JSlider) f3.get(transpSlispinner);
slider.setEnabled(false);
Field f4 = transpSlispinner.getClass().getDeclaredField("spinner");
f4.setAccessible(true);
JSpinner spinner = (JSpinner) f4.get(transpSlispinner);
spinner.setEnabled(false);
}
}
Run Code Online (Sandbox Code Playgroud)
祝你好运:)