出于性能原因,我在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)。我正在寻找等效的但是用于表格标题单元格。
谢谢, 阿米特
答案 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
。