当我在 Windows 7 上使用 JComboBox 时,四个角各有一个像素与父组件的背景颜色不匹配。
在 Windows 8 中不会发生此问题(尽管这可能是因为在 Windows 8 中,JComboBox 呈现为完美的矩形)。它也不会发生在 OS X 上。
如何使角像素让父组件的背景色通过?
这是显示问题的图像:
这是我正在使用的独立代码示例:
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
} catch (Exception e) {
e.printStackTrace();
}
JPanel contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
JComboBox<String> comboBox = new JComboBox<String>(new String[]{"One", "Two"});
contentPane.add(comboBox);
JFrame frame = new JFrame("JComboBox Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
最佳答案
尝试移除边框...
comboBox.setBorder(null);
下一个选择是设计一个专门的外观委托(delegate),以在 Windows 上实现您想要的...
例如……
public static class MyComboBoxUI extends WindowsComboBoxUI {
@Override
protected void installDefaults() {
super.installDefaults();
LookAndFeel.uninstallBorder(comboBox);
}
public static ComponentUI createUI(JComponent c) {
return new MyComboBoxUI();
}
}
然后使用...安装它
UIManager.put("ComboBoxUI", MyComboBoxUI.class.getName());
这意味着您不需要删除您创建的每个组合框的边框
或者,您可以简单地覆盖 UIManager
中的默认边框属性...
UIManager.put("ComboBox.border", new EmptyBorder(0, 0, 0, 0));
无论哪种方式,它都会影响应用它后创建的所有组合框...
关于java - Windows 7 上的 JComboBox 有渲染瑕疵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261277/