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(假)代码>
对于一个简单的结果来说,这是一个相当大的工作…为什么你希望标签打开时背景会显示出来!不透明;-)