Swing:JScrollPane导致渲染问题

时间:2012-07-09 03:35:48

标签: java swing jscrollpane

有时(并非总是)滚动我的JScrollPane栏时,一些组件(通常是像JLabel这样的文本)不能正确重新绘制,它们最终只会被部分渲染。

我不知道为什么会这样。我已经尝试在AdjustmentListener中调用paint(),但这似乎没有帮助。

有什么想法吗?

编辑:组件的初始化

    panel = new JPanel();
    ImageIcon img = new ImageIcon("editor.png");
    setIconImage(img.getImage());
    initComponents();

    final JScrollPane pane = new JScrollPane(panel);
    this.setContentPane(pane);
    //pane.setLayout(new ScrollPaneLayout());
    //pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    Dimension dim = panel.getSize();
    dim.height = dim.height - 100;
    pane.setSize(dim);
    this.setSize(dim);
    AdjustmentListener hListener = new AdjustmentListener() {
        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
            repaint();
            for(Component c : panel.getComponents())
                c.repaint();
            for(Component c : pane.getComponents())
                c.repaint();
            panel.repaint();
            panel.revalidate();
            pane.repaint();
            pane.revalidate();
        }
    };
    pane.getVerticalScrollBar().addAdjustmentListener(hListener);
    panel.setVisible(true);
    pane.setVisible(true);

1 个答案:

答案 0 :(得分:8)

违反任何这些基本原则都可能导致渲染工件。

附录:结合这些字母组合,这个相关的example滚动了数千个闪烁的JLabel实例而没有工件。