JTable внутри JTable не рендерит - PullRequest
0 голосов
/ 06 марта 2019

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

Даже пытался установить insideTable цвет переднего плана на красный, но все равно не видел никаких изменений

  table.setDefaultRenderer(List.class, new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            String[] columns = {"Name","Duration","Location"};
            List<Track> tracks = (ArrayList<Track>) value;

            DefaultTableModel model = new DefaultTableModel(columns,0);
            JTable insideTable = new JTable(model);

            for(Track t: tracks){
                String[] r = {t.getName(),t.getDuration(),t.getLocation()};
                model.addRow(r);
            }
            model.fireTableDataChanged();
            insideTable.setVisible(true);

            return insideTable;
        }
    });

Вот как это выглядит.

Using custom render

Этот использует рендеринг по умолчанию.

Using default render

РЕДАКТИРОВАТЬ: Решено

 table.setDefaultRenderer(List.class, new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            String[] columns = {"Name","Duration","Location"};
            List<Track> tracks = (ArrayList<Track>) value;

            DefaultTableModel model = new DefaultTableModel(columns,0);
            JTable insideTable = new JTable(model);

            for(Track t: tracks){
                String[] r = {t.getName(),t.getDuration(),t.getLocation()};
                model.addRow(r);
            }
            table.setRowHeight(row, 20 + (15 * insideTable.getRowCount()));
            JScrollPane columnFix = new JScrollPane(insideTable);
            columnFix.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

            return columnFix;
        }
    });

Fixed

1 Ответ

0 голосов
/ 07 марта 2019

Ладно, я решил это, задав произвольную высоту строки, а затем исправил columnNames, которые не показывались.

table.setRowHeight(row, 20 + (15 * insideTable.getRowCount()));
JScrollPane columnFix = new JScrollPane(insideTable);
columnFix.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...