2016-03-22 2 views
1

Я использую сетки JIDE для загрузки огромных таблиц данных в удобном формате. Моя основная причина использования сетки JIDE состояла в том, чтобы иметь возможность фильтрации и сортировки. Есть фильтры/сортировщики, доступные там, которые могут быть подключены к старым и удобны в настройке, но скорее всего лексически, а не численно. Я считаю, что это связано с базовым классом данных Matlab.Как настроить сетки JIDE в Matlab

До сих пор встроенная фильтрация JIDEs хорошо работала и отвечала нагрузкам даже быстрее, чем старая версия, пригодная для использования в Matlab, когда я загружаю около 500x35 смешанных типов данных. Но есть еще несколько вещей, которые я хотел бы настроить, к которым я не нашел ссылок в документации JIDE.

1) Кто-нибудь знает, как добавить строку номера строки в реализацию JIDE? (точно так же, как заголовок номера строки в старых/новых конфигурациях). Я попытался использовать findobj и проверить (по Yair Altman) утилиту, чтобы найти их и включить их, но они, кажется, полностью отсутствуют. Или я чего-то не хватает! JIDE Implementation Would like to see similar row headers as in old uitable

2) Когда мы выбираем «пользовательский фильтр» из выпадающего списка столбца и выбрать «есть» или «не равно» или «больше» он показывает вкладку выбора даты, как мы можем удалить это вкладка. Если это невозможно или сложно, как я могу удалить эти параметры? enter image description here


3) И, наконец, как я могу установить количество отображаемых десятичных знаков в сетке?


Код для воспроизведения вопросов.

% 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'); 

Спасибо за ваше время и помощь.

ответ

1

Отвечая на вопрос другого, кто может столкнуться с той же проблемой.

1) JIDE не имеет заголовка строки автоматически. Это можно сделать через TableScrollPane, что, к сожалению, намного сложнее. Простым обходным путем является создание первого столбца в виде заголовка строки и предоставление ему «Look and Feel» заголовка строки путем внесения изменений в DefaultTableCellRenderer. Код ниже. Я предполагаю, что это легко поддерживать в долгосрочной перспективе.

% 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) Десятичные разряды могут быть установлены путем написания простого расширения на DefautTableCellRenderer в Java. Скомпилируйте это, чтобы получить класс> javaaddpath для этого класса в matlab> заменить DefaultTableCellRenderer на TableCellRenderer. Образец Java класса ниже:

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, как это.

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; 

Надеюсь, что это поможет другим, столкнувшимся с той же проблемой.

Смежные вопросы