2017-07-28 196 views
1
import javax.swing.*; 
import java.awt.*; 

public class Test1 { 
int x = 70; 
int y = 70; 

public static void main (String[] args) { 
    Test1 gui = new Test1(); 
    gui.go(); 
} 
public void go() { 
    JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    MyDrawPanel drawPanel = new MyDrawPanel(); 
    frame.getContentPane().add(drawPanel); 
    frame.setSize(300,300); 
    frame.setVisible(true); 

    for (int i = 0; i < 130; i++) { 
     x++; y++; 
     drawPanel.repaint(); 
     try { Thread.sleep(50); 
     } catch(Exception ex) { } } 
}// close go() method 

class MyDrawPanel extends JPanel { 
    public void paintComponent(Graphics g) { 
     g.setColor(Color.green); 
     g.fillOval(x,y,40,40); 
    } 
} // close inner class 
} // close outer class 

​​page2为什么这个圈子没有得到涂抹

据2页,圆应在框架涂抹......但实际上,当我跑它,它只是移动无拖尾。那是为什么? 顺便说一句,如果这些代码无法做出涂抹圈,我该如何涂抹一个?

欢呼

+1

什么操作系统.......? – MadProgrammer

+0

OSX ............ –

+1

这可能是一个与它在Mac上的实现有关的问题,因为我可以确认您的代码的工作原理而不会模糊 – MadProgrammer

回答

1

如图所示here, “如果你不孝敬opaque property你会可能看到的视觉假象。”事实上,在带有Java 6的Mac OS X上运行您的示例会产生一系列出现“污点”的圆圈。

image

我怎么能做出一个涂抹?

代码:

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.geom.Ellipse2D; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Test2 { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test2()::display); 
    } 

    public void display() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     final MyDrawPanel drawPanel = new MyDrawPanel(); 
     frame.add(drawPanel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    class MyDrawPanel extends JPanel { 

     private int x = 30; 
     private int y = 30; 
     private final List<Shape> list = new ArrayList<>(); 

     public MyDrawPanel() { 
      new Timer(50, (new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        x++; 
        y++; 
        list.add(new Ellipse2D.Double(x, y, 40, 40)); 
        repaint(); 
       } 
      })).start(); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      g.setColor(Color.green); 
      for (Shape s : list) { 
       g2d.fill(s); 
      } 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(300, 300); 
     } 
    } 
} 

重点煤矿。

+1

很酷,非常感谢 –