Java drawOval的意外行为
我面临drawOval函数的问题。我用它画圆,但结果看起来不像一个圆。 我认为这种行为发生在Jpanel达到一定高度后。 向下滚动到最后,您可以得到如下图所示的结果。 有人能解释一下吗Java drawOval的意外行为,java,swing,java-2d,Java,Swing,Java 2d,我面临drawOval函数的问题。我用它画圆,但结果看起来不像一个圆。 我认为这种行为发生在Jpanel达到一定高度后。 向下滚动到最后,您可以得到如下图所示的结果。 有人能解释一下吗 将面板尺寸更改为更合理的尺寸,例如:1000,它将正常工作。将面板尺寸更改为更合理的尺寸,例如:1000,它将正常工作。设置首选尺寸(新尺寸(1960,77660240))。您希望77660240号码会发生什么情况?这比我现在的屏幕高出7万倍!那么使用JScrollPane有什么好处呢?滚动窗格用于说明大于可
将面板尺寸更改为更合理的尺寸,例如:1000,它将正常工作。将面板尺寸更改为更合理的尺寸,例如:1000,它将正常工作。
设置首选尺寸(新尺寸(1960,77660240))代码>。您希望77660240号码会发生什么情况?这比我现在的屏幕高出7万倍!那么使用JScrollPane有什么好处呢?滚动窗格用于说明大于可用显示空间的组件。但不是那些比可用空间大得离谱的组件。例如,想想滑杆的事情。它会缩放,以便较长的对象将生成较小的滑块。但在70000倍的差异下,滑块“逻辑上”是。。只有一个像素高!还有一个问题是JRE是否有足够的内存来处理如此大的对象。如果我知道这样做的最终目的,我也许能够提出更好的策略。奇怪的是,对我来说,变形开始出现在大约(2^31-1)/64
。不确定它是否有任何意义。setPreferredSize(新维度(1960,77660240))代码>。您希望77660240号码会发生什么情况?这比我现在的屏幕高出7万倍!那么使用JScrollPane有什么好处呢?滚动窗格用于说明大于可用显示空间的组件。但不是那些比可用空间大得离谱的组件。例如,想想滑杆的事情。它会缩放,以便较长的对象将生成较小的滑块。但在70000倍的差异下,滑块“逻辑上”是。。只有一个像素高!还有一个问题是JRE是否有足够的内存来处理如此大的对象。如果我知道这样做的最终目的,我也许能够提出更好的策略。奇怪的是,对我来说,变形开始出现在大约(2^31-1)/64
。不知道它是否意味着什么。但是为什么它对drawRect正确工作,并且大小没有限制。不知道为什么,但是这样的大小肯定是绝对不合理的。我试过7000000,它可以工作,但即使是那个尺寸也不现实…但为什么它对drawRect正确工作,并且没有大小限制。不知道为什么,但这样的尺寸肯定是绝对不合理的。我试着用7000000,效果不错,但即使是这样的尺寸也不现实。。。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class TestMain
{
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JScrollPane jsp = new JScrollPane();
jsp.setViewportView(new TestPanel());
f.getContentPane().add(jsp);
f.setSize(500,400);
f.setLocation(200,200);
f.setVisible(true);
}
}
class TestPanel extends JPanel
{
public TestPanel()
{
setPreferredSize(new Dimension(1960 , 77660240));
setBackground(Color.white);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawRect(30, 77660141, 100, 20);
g2.drawOval(15, 77660141, 10, 10);
g2.draw(new Ellipse2D.Double(140, 77660141,
10,
10));
g2.draw(new Ellipse2D.Double(160, 77660141,
10,
10));
g2.draw(new Ellipse2D.Double(180, 77660141,
10,
10));
g2.draw(new Ellipse2D.Double(200, 77660141,
30,
30));
}
}