Java jTable透明背景,但保留setSelectionBackground

Java jTable透明背景,但保留setSelectionBackground,java,swing,Java,Swing,我希望我的jTable背景是透明的(这正在工作),并且我还希望为表格创建渐变。setSelectionBackground颜色 这就是我现在拥有的。它正在成功创建透明背景,但当我选择一行时,没有setSelectionBackground颜色 这就是我如何创建我的jTable: agentTable = new JTable(agentModel); agentTable.setRowHeight(55); agentTable.getTableHead

我希望我的
jTable
背景是透明的(这正在工作),并且我还希望为
表格创建渐变。setSelectionBackground
颜色

这就是我现在拥有的。它正在成功创建透明背景,但当我选择一行时,没有
setSelectionBackground
颜色

这就是我如何创建我的
jTable

       agentTable = new JTable(agentModel);
       agentTable.setRowHeight(55);
       agentTable.getTableHeader().setReorderingAllowed(false);
       agentTable.setIntercellSpacing(new Dimension(0, 0));
       agentTable.setShowGrid(false);
       agentTable.setRowSelectionAllowed(true);
       agentTable.setTableHeader(null);
       agentTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
       agentTable.setForeground(new java.awt.Color(0, 0, 0));
       agentTable.setSelectionBackground(new java.awt.Color(85, 159, 204));
       agentTable.setSelectionForeground(new java.awt.Color(255, 255, 255));
       agentTable.setPreferredScrollableViewportSize(agentTable.getPreferredSize());

       agentTable.setDefaultRenderer(Object.class, new MyRenderer());
       agentTable.getColumnModel().getColumn(1).setCellRenderer(new SecutiryBadgeTableCellRenderer());

       agentScrollPane = new JScrollPane(agentTable);
       agentScrollPane.setMinimumSize(new Dimension(150, 50));
       agentScrollPane.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, new java.awt.Color(187, 187, 187)));
       agentScrollPane.setOpaque(false);
       agentScrollPane.getViewport().setOpaque(false);
这是我的两个渲染器:

       public class MyRenderer extends DefaultTableCellRenderer {
           @Override
           public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
               super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
               setBorder(noFocusBorder);

               if (isSelected) {

               } else {
                   setOpaque(false);
               }
               return this;
           }
       }

       public static class SecutiryBadgeTableCellRenderer extends DefaultTableCellRenderer {
           protected static BufferedImage background;
           private JLabel subImage;

           public SecutiryBadgeTableCellRenderer() {
               setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/agentImageBgSmall.png")));
               setLayout(new GridBagLayout());
               subImage = new JLabel();
               subImage.setHorizontalAlignment(JLabel.LEFT);
               subImage.setVerticalAlignment(JLabel.TOP);
               subImage.setBorder(new EmptyBorder(9, 6, 0, 0));
               add(subImage);
               setOpaque(false);
           }

           @Override
           public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
               super.getTableCellRendererComponent(table, null, isSelected, hasFocus, row, column);
               Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
               if (value instanceof Image) {
                   Image img = (Image) value;
                   subImage.setIcon(new ImageIcon((Image) value));
                   subImage.setSize(subImage.getPreferredSize());
               } else {
                   subImage.setIcon(null);
               }

               setBorder(noFocusBorder);

               return this;
           }
       }
奇怪的是,当我选择该行时,该行的颜色正在改变,但我无法显示背景色。我真的希望背景颜色是渐变色


我怎样才能做到这一点呢?

如果表格位于
滚动窗格中,那么它也将变得透明:

scrollPane.setOpaque(false)
scrollPane.getViewport().setOpaque(false)

至少可以删除轴网线:

table.setShowGrid(假)


对于一个简单的结果来说,这是一个相当大的工作…

为什么你希望标签打开时背景会显示出来!不透明;-)