可滚动的JPanel基于它的paintComponent

时间:2014-08-07 21:07:00

标签: java swing jpanel jscrollpane paintcomponent

我正在使用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);

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

有什么问题? 有谁可以帮助我?

提前致谢:)

1 个答案:

答案 0 :(得分:3)

滚动窗格使用首选大小的组件来确定它应该有多大,并在组件大小大于滚动窗格大小时提供滚动...

尝试覆盖自定义组件的getPreferredSize方法并返回所需的大小

如果MyPanel的大小在程序的运行时间内发生变化,请使用对Dimension的引用(由getPreferredSize返回)并在更改时调用revalidate