JScrollPane中的透明JList都在一个类中

时间:2015-05-20 02:06:24

标签: java swing

我有一个JFrame,我已经淹没了背景:

 class ImagePanel extends JComponent {
        private Image image;
        public ImagePanel(Image image) {
            this.image = image;
        }
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    }

现在我必须列出一些对象,所以我在JScrollPane中添加了一个JList(不确定这是否足够)。

问题是:有没有办法让项目区域(JList和JScrollPane)的背景透明,只显示项目列表?

我尝试了setOpaque的所有变体(false);让viewPort没有得到它等...

P.S。我看到了一个类似的问题,但是有一些类分离。我把所有窗口组件放在一个类中。

2 个答案:

答案 0 :(得分:5)

您需要将JListJScrollPaneJScrollPane的{​​{1}}全部透明,例如......

JViewport

哦,还有最后一招,您需要将list.setOpaque(false); JScrollPane sp = new JScrollPane(list); sp.setOpaque(false); sp.getViewport().setOpaque(false); 的单元格渲染器替换为未选中的单元格渲染器,例如

JList

Transparent List

public class TransparentListCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        setOpaque(isSelected);
        return this;
    }

}

答案 1 :(得分:0)

您应该创建一个简单的列表单元格渲染器,然后在listName。setCellRenderer(new YourListCellRenderer());

中调用它

例如:- 您的列表单元格渲染器代码应如下所示

public class MyListCellRender extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList<?> list1, Object obj, int index, boolean isSelected, boolean isFocus) {
            super.getListCellRendererComponent(list1, obj, index, isSelected, isFocus);
            setForeground(Color.WHITE);
            setOpaque(isSelected);
            return this;
        }

}

然后在想要的任何位置或任何位置调用它,例如表单活动事件或初始阶段,在我的情况下,我在表单创建后的初始阶段调用它。这意味着在initComponent();

之后
    initComponents();
    jList1.setUI(new WebListUI());
    scrollBar.setOpaque(false);
    scrollBar.getViewport().setOpaque(false);
    jList1.setOpaque(false);
    jList1.setCellRenderer(new TransparentListCellRender()); 

This is my Sample