#java #swing #jtable
#java #swing #jtable
Вопрос:
Я пытаюсь отобразить JTables в ячейках внешней JTable. Все ALLYTIPS
строки , ENEMYTIPS
, STATS
, SPELLS
, и PASSIVE
будут иметь JTables для соответствующей Value
им ячейки (имя столбца).
Вот как в настоящее время выглядит внешняя 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