表头边框旧的uitable matlab

时间:2016-03-20 09:25:30

标签: java swing matlab uitableview

出于性能原因,我在Matlab中使用旧版本的uitable。我正在尝试更改表头的单元格边框颜色。目前,两个列标题单元彼此无法区分。我尝试过以下方法:

自定义列渲染器但仍无法更改表格标题边框。以下似乎可以工作,但是边界整个标题而不是表格标题单元格。

h_old=uitable('v0','data',magic(5),'position',[5,5,550,400]);
set(h_old,'Units','normalized');
% get the underlying java table
jtable=h_old.getTable;
% get table header
theader=jtable.getTableHeader;
% set intended color 
color=java.awt.Color(9471874);
% create a line border
theaderborder=javax.swing.BorderFactory.createLineBorder(color);
% set it in table header
theader.setBorder(theaderborder);

这会在整个标题周围设置边框,但不会在单元格中设置。谁知道怎么做?

要更改jtable网格(表格单元格边框),我可以执行jtable.setGridColor(color)。我正在寻找等效的但是用于表格标题单元格。

谢谢, 阿米特

1 个答案:

答案 0 :(得分:3)

你需要做一点点java编码。您需要通过扩展DefaultTableCellRenderer来实现自定义单元格渲染器。由于您无法在Matlab中编写内联java代码,因此需要将此类打包在jar中并添加到java路径中。

你需要的课程应该是这样的:

public class CustomBorderCellRenderer extends DefaultTableCellRenderer {
    private static final long serialVersionUID = 1L;

    private Color borderColor;

    public CustomBorderCellRenderer(Color borderColor) {
        this.borderColor = borderColor;
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JComponent component = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        ((JLabel) component).setHorizontalAlignment(JLabel.CENTER);
        component.setBorder(BorderFactory.createLineBorder(borderColor));
        return component;
    }
}

请注意,它会覆盖某些默认外观,因此除了设置边框颜色外,您可能还想自定义背景颜色等。例如,我还会将标题标注居中,否则会显示在左侧。

打包并加载jar后,用法很简单:

javaaddpath('Path\to\YourJar.jar');
figure();
hTable = uitable('v0', 'data', magic(5), 'position', [5,5,550,400]);
set(hTable, 'Units', 'normalized');
borderColor = java.awt.Color(1,0,0);
renderer = CustomBorderCellRenderer(borderColor);
header = hTable.getTable().getTableHeader();
header.setDefaultRenderer(renderer);

您可能还需要触发表格重新绘制自己,例如使用drawnow

enter image description here