2013-09-28 70 views
0

我想我的jTable背景是透明的(这是工作),我也想创建一个table.setSelectionBackground颜色的渐变。Java 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; 
      } 
     } 

奇怪的是,当我选择它的行的颜色正在发生变化,但我不能得到一个背景颜色显示。我真的很喜欢背景颜色是一个渐变。

我怎么能做到这一点?

+0

为什么当标签是!opaque时,你期望背景显示出来;-) – kleopatra

回答

0

如果表是在ScrollPane,它是使透明以及:

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

至少,你可以删除网格线:

table.setShowGrid(false);

相当的简单造成一个很大的工作......