JTable only字符串列是透明的



我有一个JTable,它只对String列透明。这个看起来像屏幕截图。

问题出在哪里?是否可以使任何对象列透明?

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

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

最新更新