代码之家  ›  专栏  ›  技术社区  ›  Hossein Mobasher

基于其paintComponent的可滚动JPanel

  •  0
  • Hossein Mobasher  · 技术社区  · 10 年前

    我正在使用 java-2d 以可视化我的应用程序。我创建了面板,扩展了 JPanel 绘制一个简单的矩形。我给这个命名了 MyPanel .

    因此,面板的宽度和高度由矩形定义动态改变。我使用 JScrollPane 为我的面板添加滚动功能,如下所示:

    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    

    我使用以下代码将面板添加到窗口:

    JFrame frame = new JFrame();
    frame.setLayout(new GridLayout(1,1));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setResizable(false);
    
    MyPanel panel = new MyPanel();
    
    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    
    frame.add(scrollPane);
    frame.setVisible(true);
    

    现在,在 paintComponents 在MyPanel中,我想用大于容器(框架)宽度和高度的宽度和高度绘制矩形。但滚动不起作用。

    怎么了? 有人能帮我吗?

    提前感谢:)

    1 回复  |  直到 10 年前
        1
  •  3
  •   MadProgrammer    10 年前

    滚动窗格使用组件首选大小来确定其大小,并在组件大小大于滚动窗格大小时提供滚动。。。

    尝试重写 getPreferredSize 方法,并返回所需的大小

    如果 MyPanel 在程序运行时发生更改时,请使用对 Dimension (由getPreferredSize返回)并调用 revalidate 当你改变它时