【问题标题】:JScrollPane inside JLayeredPane no repaint?JLayeredPane 里面的 JScrollPane 没有重绘?
【发布时间】:2011-11-05 14:29:00
【问题描述】:

这可能很简单,但我完全糊涂了。

当我在窗格中滚动时,JLayeredPane 中有一个JScrollPaneJLayeredPane 上面的内容根本不会重新绘制。

这里我有一个小例子,注意蓝色方块根本没有被重新绘制。

我是否完全误解了分层窗格的工作原理?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class LayeredTest extends JPanel{

    public LayeredTest(){

        JPanel content = new JPanel();
        content.setBackground(Color.red);
        content.setPreferredSize(new Dimension(2048, 2048));
        content.setBounds(0, 0, 2048, 2048);
        JPanel control = new JPanel();
        control.setBackground(Color.blue);
        control.setPreferredSize(new Dimension(200, 50));
        control.setBounds(0, 0, 100, 50);

        JScrollPane scroll = new JScrollPane(content);
        scroll.setBounds(0, 0, 400, 400);

        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(400, 400));

        layeredPane.add(control, 0);
        layeredPane.add(scroll, 1);

        this.add(layeredPane, BorderLayout.CENTER);
    }


    public static void main(String[] args) {
        //Create and set up the window.
        JFrame frame = new JFrame("Test - Very lulz");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100, 100);
        frame.setSize(400, 400);

        //Create and set up the content pane.
        frame.setContentPane(new LayeredTest());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
}

有什么想法吗?

【问题讨论】:

    标签: java swing jscrollpane jlayeredpane


    【解决方案1】:

    您正在做的是将组件controlscroll 添加到“默认”层,因此实际上它们仍然在同一层上。要将它们放在不同的图层上,您还需要指定图层编号。最好将组件放置在默认层(索引为 0 的最底层)和下一层(索引为 100 的“调色板”层)之间的某个位置。

    因此,例如,要将组件放在第 50 层和第 51 层上,请将要添加到 layeredPane 的组件的位置更改为:

        layeredPane.add(scroll, 50, 0);
        layeredPane.add(control, 51, 0);
    

    这会将scroll 放置在第 50 层的位置 0 上,并将 control 放置在第 51 层的位置 0 上。

    【讨论】:

    • 感谢您的回复似乎有效!我完全错过了“索引”不是图层索引。完美答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多