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-谢谢!
我有一个仅对字符串列透明的 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-谢谢!