Визуализация JTable для определенных ячеек внутри другой JTable

#java #swing #jtable

#java #swing #jtable

Вопрос:

Я пытаюсь отобразить JTables в ячейках внешней JTable. Все ALLYTIPS строки , ENEMYTIPS , STATS , SPELLS , и PASSIVE будут иметь JTables для соответствующей Value им ячейки (имя столбца).

Вот как в настоящее время выглядит внешняя JTable:

Вот как в настоящее время выглядит внешняя JTable

Каков наилучший способ визуализации JTables для этих ячеек? Я создал пользовательский TableCellRenderer интерфейс, который переопределяет getTableCellRendererComponent , который выглядит следующим образом:

 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component component = null;
        if(column == 1) {
            switch(row) {
                case 3: case 4: {
                    List<String> tips = (List)value;
                    TipsTableModel tableModel = new TipsTableModel(tips);
                    component = new JTable(tableModel);
                    break;
                }
                case 5: {
                    ChampionStats stats = (ChampionStats)value;
                    StatsTableModel tableModel = new StatsTableModel(stats);
                    component = new JTable(tableModel);
                    break;
                }
                case 6: {
                    HashMap<String, ChampionSpell> spells = (HashMap)value;
                    SpellsTableModel tableModel = new SpellsTableModel(spells);
                    component = new JTable(tableModel);
                    break;
                }
                case 7: {
                    String[] passive = (String[])value;
                    PassiveTableModel tableModel = new PassiveTableModel(passive);
                    component = new JTable(tableModel);
                    break;
                }
                default: component = null;
            }
        }
        return component;
    }
  

и код для внешней таблицы, который устанавливает значение TableCellRenderer для каждой ячейки:

 for(int i = 0; i < championTableInfo.getRowCount(); i  ) {
                Object value = championTableInfo.getValueAt(i, 1);
                javax.swing.JTable cell = (javax.swing.JTable)renderer.getTableCellRendererComponent(championTableInfo, value, false, false, i, 1);
                championTableInfo.setValueAt(cell, i, 1);
            }
  

что ничего не делает.

У меня есть пользовательские TableModel s для каждого из объектов в ячейках, для которых я хочу визуализировать JTables.

Похоже, мне может понадобиться использовать getCellRenderer его на внешнем JTable объекте, но я не совсем уверен, как это сделать. Или мне нужно визуализировать ячейку непосредственно в getValueAt методе TableModel внешней JTable?

Комментарии:

1. Внутренняя таблица должна быть частью средства визуализации, и ее данные могут быть вложенными векторами или табличной моделью. Храните модель и представления отдельно.

2. Сказав это, я бы не стал этого делать, если бы это был мой код. Рассмотрите возможность наличия 2 JTables, основной таблицы и подробной таблицы, таблица подробностей меняется при изменении выбранной основной ячейки.

3. @DontKnowMuchButGettingBetter две таблицы могут быть хорошей идеей. Какая-либо конкретная причина такого подхода? Просто простота использования при просмотре таблицы?

4. JTable в качестве средства визуализации будет иметь очень ограниченную функциональность, особенно в отношении реагирования на щелчки мыши и выбор ячеек. Вам также придется сделать это редактором, и это просто кажется ненужной сложностью.

5. Если вы еще этого не видели, возможно, это будет полезно: отображение JTable внутри другой JTable