JTable 只有字符串列是透明的

JTable only String columns are transparent

我有一个仅对字符串列透明的 JTable。 看起来像在这个 screenshot.

问题是什么?是否可以使任何对象列透明?

    table = new JTable(takeOrderWithTableController.getData(), new String[] { "Nazwa", "Trucizna?", "Na receptę?",
            "Kod kreskowy", "Data ważności", "Ostatni dzień sprzedaży", "Ilość" }) {
        private static final long serialVersionUID = 1L;

        @Override
        public Class<?> getColumnClass(int column) {
            switch (column) {
            case 0:
                return String.class;
            case 1:
                return Boolean.class;
            case 2:
                return Boolean.class;
            case 3:
                return Integer.class;
            case 4:
                return String.class;
            case 5:
                return String.class;
            case 6:
                return Integer.class;
            default:
                return String.class;
        }
    };
    };
    DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer();
    defaultTableCellRenderer.setHorizontalAlignment(JLabel.CENTER);
    defaultTableCellRenderer.setOpaque(false);
    table.setDefaultRenderer(Object.class, defaultTableCellRenderer);
    table.setRowSelectionAllowed(false);
    scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(Constants.MAIN_WINDOW_MIN_WIDTH-100, 500));
    mainPanel.add(scrollPane);
    mainPanel.add(Box.createRigidArea(new Dimension(0, 20)));
    scrollPane.setOpaque(false);
    scrollPane.getViewport().setOpaque(false);
    mainPanel.setOpaque(false);
    table.setOpaque(false);

问题已解决。我不得不添加

    table.setDefaultRenderer(String.class, defaultTableCellRenderer);
    table.setDefaultRenderer(Boolean.class, defaultTableCellRenderer);
    table.setDefaultRenderer(Integer.class, defaultTableCellRenderer);
    table.setDefaultRenderer(Date.class, defaultTableCellRenderer);

似乎如果你想让你的 table 透明,你必须为你使用的每个 class 设置渲染器。 @SteveChaloner-谢谢!