Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表格标题边框旧的uitable matlab_Java_Swing_Matlab_Uitableview - Fatal编程技术网

Java 表格标题边框旧的uitable matlab

Java 表格标题边框旧的uitable matlab,java,swing,matlab,uitableview,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 t

出于性能原因,我在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(颜色)。我正在寻找相同的,但表头单元格

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);
谢谢,
Amit

您需要做一点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


谢谢你,涅盘。我想没有解决办法。我试图避免java编程,因为我没有java编程方面的背景,也没有这方面的编程背景。这是一个陡峭的学习曲线,我们已经开始努力了,还不算太陡。然而,学习它将为您在Matlab中打开无限的UI(而不仅仅是)可能性。在任何IDE中,打包一个jar只需点击几下鼠标,包括Eclipse这样的免费IDE。有很多文档描述了每一步。谢谢涅磐。我正在使用IntelliJ打包一个罐子。但当我在Matlab中使用它时,它无法识别“未定义的函数或变量”。打包jar时,我必须选择的主要类是什么?如果您已经添加了所有导入,并且没有未解决的错误,那么它应该可以工作。Jar只不过是一个zip存档文件——您可以使用
winrar
/
7zip
打开它,并确保它有一个
CustomBorderCellRenderer.class
文件。还有一个非常有用的函数,它提供了检查类是否已加载的最简单方法。Re coffee-抱歉,我很忙,现在没有太多时间做项目。尽管如此,请在这里自由提问。)