首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中定制JIDE网格

如何在Matlab中定制JIDE网格
EN

Stack Overflow用户
提问于 2016-03-22 12:03:52
回答 1查看 958关注 0票数 2

我使用JIDE网格以可使用的格式加载巨大的数据表。我使用JIDE网格的主要原因是具有工作的过滤和排序能力。有可用的过滤器/分类器,它们可以与旧的可使用的,更容易配置,但大多数排序词汇,而不是数字。我相信这是由于Matlab的底层数据类。

到目前为止,当我加载混合数据类型的Neary500x35时,JIDEs内置的过滤工作得很好,加载速度甚至比Matlab中的旧版本uitable还要快。但是我还想配置一些其他的东西,我在JIDE文档中没有找到它们的参考。

1)有人知道如何在JIDE实现中添加行号列吗?(就像旧的/新的可使用配置中的行号标题一样)。我尝试过使用findobj并检查(由Yair )实用程序来找到它们并打开它们,但是它们似乎完全是missing.Or,我遗漏了一些东西!

2)当我们从列下拉列表中选择“定制筛选器”并选择“is”或“how等”或“大于”时,我们如何删除该选项卡。如果这是不可能的或困难的,我如何删除这些选项?

3)最后,如何设置显示在网格中的小数位数?

复制问题的代码。

代码语言:javascript
复制
% calling old uitable for performance reasons
f1=figure;
[h_Old,containter] = uitable('v0','data',magic(5),'ColumnNames',{'A','B',...
    'C','D','E'},'Position',[5 5 500 400],'Parent',f1);
set(h_Old,'Units','normalized','Editable',false);

% Anotherway: JIDE grids even faster in setting up uitable with huge data
data=num2cell(magic(5));
jtable=com.jidesoft.grid.SortableTable(data,{'A','B','C','D','E'});
theader = com.jidesoft.grid.AutoFilterTableHeader(jtable);
theader.setAutoFilterEnabled(true)
theader.setShowFilterName(true)
theader.setShowFilterIcon(true)
jtable.setTableHeader(theader)
jscroll = javax.swing.JScrollPane(jtable);
f2=figure;
[h_old_2,container_2] = javacomponent(jscroll,[5,5,500,400],f2)
set(container_2,'Units','norm');

谢谢你的时间和帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-02 11:47:36

为可能面临同样问题的另一个人的利益服务。

1) JIDE不自动具有行标题。这可以通过TableScrollPane来完成,不幸的是,这要复杂得多。一个简单的解决方法是将第一列作为行标题,并通过更改DefaultTableCellRenderer使其具有行标题的“外观和感觉”。下面的代码。从长远来看,我想这是很容易维护的。

代码语言:javascript
复制
% Making changes to DefaultTableCellRenderer
% Give first column a header look, Center data
cr0 = javax.swing.table.DefaultTableCellRenderer();
cr0.setHorizontalAlignment(0) % 0 for CENTER, 2 for LEFT and 4 for RIGHT
cr0.setBackground(java.awt.Color(15790320)); % grey backgroundt
jtable.getColumnModel.getColumn(0).setCellRenderer(cr0);
jtable.getColumnModel.getColumn(0).setResizable(false);
jtable.getColumnModel.getColumn(0).setMaxWidth(32);

2)这可以通过定义jtable列类来完成。仍在进行中。我的回答很快就会更新。

3)可以通过用Java编写一个简单的DefautTableCellRenderer扩展来设置十进制位置。在matlab中编译这个类以获得一个类> javaaddpath >将DefaultTableCellRenderer替换为TableCellRenderer。下面是一个示例Java类:

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.text.DecimalFormat;
public class CustomCellRenderer extends DefaultTableCellRenderer implements TableCellRenderer
{
    public Component getTableCellRendererComponent
            (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        JComponent cell = (JComponent) super.getTableCellRendererComponent
                (table, value, isSelected, hasFocus, row, column);
        // set color
        cell.setBackground(new Color(0xC8C8C8));
        cell.setForeground(new Color(0xFFFFFF));

        //set Alignment
        ((JLabel)cell).setHorizontalAlignment(SwingConstants.CENTER);

        //set selection colors
        if (isSelected){
            cell.setBackground(new Color(0x3399FF));
            cell.setForeground(new Color(0x000000)); // AM
        }else{
            // set decimals
            DecimalFormat DecimalFormatter = new DecimalFormat("#.00");
            value = DecimalFormatter.format(value);
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
    return cell;
    }

}

将该类添加到Matlab中,并将DefaultTableCellRenderer替换为TableCellRenderer,如下所示。

代码语言:javascript
复制
data = {8.252,1.528,6.2598; 3.258,5.548,7.698; 4.448,9.5454,2.5644}; 
cols = {'A','B','C'}
DTM=javax.swing.table.DefaultTableModel(data,cols);
jtable = com.jidesoft.grid.SortableTable();
jtable.setModel(DTM);
jscroll = javax.swing.JScrollPane(jtable);
[htable,container] = javacomponent(jscroll,[5,5,500,400]);
set(container,'Units','norm');
javaaddpath('\ExternalSources\JavaExtenstions\CustomCellRenderer');
cr=CustomCellRenderer();
for i=0:2, jtable.getColumnModel.getColumn(i).setCellRenderer(cr), end;
jtable.repaint;

希望这能帮助其他面临同样问题的人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36153934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档