大家帮忙看看我的问题。我在JPanel上面画点。源程序看下面。
问题1:我怎么限定点出现的范围在Panel上面?
问题2:第二次点按钮的时候第一次的点不消失?
package gemini;import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;public class Main {
public static void main(String[] args) {
// TODO 自动生成方法存根
Wind win = new Wind();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
win.setBounds(100, 100, 450, 300);
win.setVisible(true);
}
}
class Wind extends JFrame {
public Wind() {
MyPanel panel = new MyPanel();
panel.setBackground(Color.BLACK);
JButton button = new JButton("Draw");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}
});
getContentPane().add(panel,BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.SOUTH);
}
}
class MyPanel extends JPanel{
Random r = new Random();
public void paint(Graphics g) {
g.fillOval(r.nextInt(300), r.nextInt(300), 5, 5);
}
public MyPanel() {
super();
} public void update(Graphics g) {
paint(g);
}}

解决方案 »

  1.   

    每次repaint之后,第一次的点就消失了。我如果要保存下来呢?
      

  2.   

    class MyPanel extends JPanel{
    Random r = new Random();
    Vector<Dimension> ps = new Vector<Dimension>(); public void paint(Graphics g) {
    Dimension d = new Dimension(r.nextInt(300), r.nextInt(300));
    ps.add(d); for(Iterator it = ps.iterator(); it.hasNext();) {
    d = it.next();
    g.fillOval(
    g.fillOval(d.width, d.height, 5, 5));
    }
    }
    public MyPanel() {
    super();
    } public void update(Graphics g) {
    paint(g);
    }}
      

  3.   

    谢谢UnAgain(),这句似乎不能用的吧?
    g.fillOval(g.fillOval(d.width, d.height, 5, 5));
    你的意思是说,用一个数组将所有画过的点都存起来,再次绘图的时候将他们一起画出来?如果有很多很多点的话,会不会导致机器崩溃掉?
      

  4.   

    class MyPanel extends JPanel{
    Random r = new Random();
    Vector ps = new Vector();
    public void paint(Graphics g) {
    Dimension d = new Dimension(r.nextInt(300), r.nextInt(300));
    ps.add(d); for (int i = 0; i < ps.size(); i++) {
    d = (Dimension) ps.get(i);
    g.fillOval(d.width, d.height, 5, 5);
    }
    } public void update(Graphics g) {
    paint(g);
    }
             
             public MyPanel() {
    super();
    }
    }
    这样改一下就能用了。UnAgain()这个iterator是什么意思呢?
      

  5.   

    跟那些hasMoreElement或者什么的那些类似,觉得Java不把他们都统一起来呢?
      

  6.   

    to:louisqiang,数据结构怎么弄呢?