0

背景を透明にしたい(これは機能しています) また、色jTableのグラデーションを作成したいと考えています。table.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);

そして、これらは私の2つのレンダラーです:

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

奇妙なことに、行を選択すると行の色が変化しますが、背景色が表示されません。背景色をグラデーションにするのが本当に好きです。

どうすればこれを達成できますか?

4

1 に答える 1

0

テーブルが にある場合は、ScrollPane同様に透明にする必要があります。

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

少なくとも、グリッド線を削除できます。

table.setShowGrid(false);

単純な結果のためのかなり大きな仕事...

于 2014-01-09T09:21:37.163 に答える