JTable细胞渲染差异跨平台

时间:2013-07-19 18:04:41

标签: java swing cross-platform swingx tablecelleditor

在我的应用程序中,我有一个2列的org.jdesktop.swingx.JXTable。两列都包含String数据。一列使用默认单元格编辑器(org.jdesktop.swingx.JXTable.GenericEditor),另一列使用自定义单元格编辑器(CustomCellEditor.java)。

使用Windows L& F两个单元格呈现相同;然而,对于GTK L& F,存在轻微差异,导致文本被遮挡。需要设置什么属性才能在GTK上正确呈现自定义编辑器?

private class CustomCellEditor extends DefaultCellEditor
{
    public CustomCellEditor(int maxStringLength)
    {
        super(new JTextField()

        ((JTextField) editorComponent).setDocument(new CustomDocument(maxStringLength));
    }

    class CustomDocument extends PlainDocument
    {
        private int limit;

        public CustomDocument(int limit)
        {
            super();
            this.limit = limit;
        }

        @Override
        public void insertString(int offset, String str, AttributeSet attr)
            throws BadLocationException
        {
          //...
        }
    }
}

Windows上的默认值:

enter image description here

Windows上的自定义:

enter image description here

Ubuntu上的默认值:

enter image description here

Ubuntu上的自定义:

enter image description here

1 个答案:

答案 0 :(得分:2)

我过去遇到同样的问题,但是使用Nimbus L& F My issue

解决这个问题

JTextField#setBorder( null )

在您的代码中

public CustomCellEditor(int maxStringLength)
    {
        super(new JTextField());
        ((JTextField) editorComponent).setDocument(new CustomDocument(maxStringLength));
        ((JTextField) editorComponent).setBorder(null); // cast may be not needed
    }