就“中断”而言,我会查看图形对象的斜角设置。
但是,我建议在程序启动时阅读 .png 然后显示它,而不是自己绘制。
RE:paint() 不会一直被调用。
是的,这就是它的工作原理。如果你需要在某个时间重绘你的组件,你需要强制它。调用 repaint() 强制重绘。
如果您要从另一个线程(即计时器线程)调用 repaint(),请务必将调用包装在 SwingUtilities.invokeLater() 中:
SwingUtilities.invokeLater( new Runnable()
{
@Override
public void run()
{
myForm.repaint();
}
} );
更新:也许你应该发布一些代码......我把一个小测试应用程序放在一起,没有发现小圆圈有任何问题。
public class MyPanel extends JPanel
{
public void paint(Graphics _g)
{
Graphics2D g = (Graphics2D) _g;
g.setStroke( new BasicStroke(1f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND) );
for(int x = 10, w = 1; w < 20; x += w*2, w++)
{
Ellipse2D.Double ed = new Ellipse2D.Double(x, 10, w, w);
g.fill( ed );
}
for(int x = 10, w = 1; w < 20; x += w*2, w++)
{
Ellipse2D.Double ed = new Ellipse2D.Double(x, 80, w, w);
g.draw( ed );
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.add( new MyPanel() );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 400, 400 );
frame.setVisible( true );
}
}
我尝试改变笔画参数以查看是否会导致视觉中断,但没有成功。你看到了什么?
不要打死马,但是当我放大该程序的输出时,我的圆圈几乎是对称的,左边减去了一点像素粪便:
这与您得到的相似吗?