首页 > 解决方案 > JTable里面的JTable不渲染

问题描述

我正在尝试将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;
        }
    });

这就是它的外观。

使用自定义渲染

这个使用默认渲染。

使用默认渲染

编辑: 解决

 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;
        }
    });

固定的

标签: javaswingjtable

解决方案


好的,我解决了它给行自定义高度,然后修复了尚未显示的 columnNames。

table.setRowHeight(row, 20 + (15 * insideTable.getRowCount()));
JScrollPane columnFix = new JScrollPane(insideTable);
columnFix.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

推荐阅读