Java 基于它的可滚动JPanel';油漆组件

Java 基于它的可滚动JPanel';油漆组件,java,swing,jpanel,jscrollpane,paintcomponent,Java,Swing,Jpanel,Jscrollpane,Paintcomponent,我正在使用java-2d可视化我的应用程序。我用JPanel的扩展创建了面板,以绘制一个简单的矩形。我已将此命名为MyPanel 因此,面板的宽度和高度会根据矩形定义动态变化。我使用JScrollPane向我的面板添加滚动功能,如下所示: JScrollPane scrollPane = new JScrollPane(panel); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

我正在使用
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
中,我想绘制宽度和高度大于容器(框架)宽度和高度的矩形。但是卷轴不起作用

怎么了? 有人能帮我吗


提前感谢:)

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

尝试重写自定义组件的
getPreferredSize
方法,并返回所需的大小


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

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

尝试重写自定义组件的
getPreferredSize
方法,并返回所需的大小


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

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

尝试重写自定义组件的
getPreferredSize
方法,并返回所需的大小


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

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

尝试重写自定义组件的
getPreferredSize
方法,并返回所需的大小


如果
MyPanel
的大小在程序运行期间发生变化,请使用对
维度的引用(由getPreferredSize返回)并在更改时调用
revalidate
,谢谢:)我应该在
paintComponent
中使用此维度来绘制矩形,对吗?!是的,在您的paintComponent中,您应该使用getWidth和getHeight,记住,preferredSize是一个提示,但JScrollPane通常会尊重它…我不理解“preferredSize是一个提示”,您可以解释更多吗?布局管理器可以使用getPreferred/Minimum/MaximumSize的组合来确定组件的大小,布局管理器就是这样工作的,但他们能够忽略这些值,并做出自己的决定,因此,在代码中,您不应该总是依赖于您想要的内容或组件的大小,但有时,这就是重点。作为一般的经验法则。我依赖于组件的实际大小,但有时我无法确定,因为我正在绘制的必须是特定的大小,例如您的情况;)谢谢:)我应该在
paintComponent
中使用这个维度来绘制矩形,对吗?!是的,在您的paintComponent中,您应该使用getWidth和getHeight,记住,preferredSize是一个提示,但JScrollPane通常会尊重它…我不理解“preferredSize是一个提示”,您可以解释更多吗?布局管理器可以使用getPreferred/Minimum/MaximumSize的组合来确定组件的大小,布局管理器就是这样工作的,但他们能够忽略这些值,并做出自己的决定,因此,在代码中,您不应该总是依赖于您想要的内容或组件的大小,但有时,这就是重点。作为一般的经验法则。我依赖于组件的实际大小,但有时我无法确定,因为我正在绘制的必须是特定的大小,例如您的情况;)谢谢:)我应该在
paintComponent
中使用这个维度来绘制矩形,对吗?!是的,在您的paintComponent中,您应该使用getWidth和getHeight,记住,preferredSize是一个提示,但JScrollPane通常会尊重它…我不理解“preferredSize是一个提示”,您可以解释更多吗?布局管理器可以使用getPreferred/Minimum/MaximumSize的组合来确定组件的大小,布局管理器就是这样工作的,但他们能够忽略这些值,并做出自己的决定,因此,在代码中,您不应该总是依赖于您想要的内容或组件的大小,但有时,这就是重点。作为一般的经验法则。我依赖于组件的实际大小,但有时我无法确定,因为我正在绘制的必须是特定的大小,例如您的情况;)谢谢:)我应该在
paintComponent
中使用这个维度来绘制矩形,对吗?!是的,在您的paintComponent中,您应该使用getWidth和getHeight,记住,preferredSize是一个提示,但JScrollPane通常会尊重它…我不理解“preferredSize是一个提示”,您可以解释更多吗?布局管理器可以使用getPreferred/Minimum/MaximumSize的组合来确定组件的大小,布局管理器就是这样工作的,但他们能够忽略这些值,并做出自己的决定,因此,在您的代码中,您不应该总是rel