java - Windows 7 上的 JComboBox 有渲染瑕疵

标签 java swing jcombobox

当我在 Windows 7 上使用 JComboBox 时,四个角各有一个像素与父组件的背景颜色不匹配。

在 Windows 8 中不会发生此问题(尽管这可能是因为在 Windows 8 中,JComboBox 呈现为完美的矩形)。它也不会发生在 OS X 上。

如何使角像素让父组件的背景色通过?

这是显示问题的图像:

enter image description here

这是我正在使用的独立代码示例:

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);

enter image description here

下一个选择是设计一个专门的外观委托(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/

相关文章:

java - 什么会导致bash无法执行在我自己的机器上编写和编译的.jar?

java - JMH 使用 javaagent 进行测试

java - 为什么这个小程序无法在 IE 上加载?

java - 无法在 Jasper Report 中添加对象列表

java - 防止 Enter 事件冒泡到主窗口

java - 从给定的子节点获取父节点

java - 无法使 JComboBox 更新 JFrame

java - 动态改变 JComboBox

java - 从组合框中选择项目时如何从数据库获取 ID 值?

java - jtable 单元格中的按钮和文本框对齐