解决方案 »
- 请教:hello world程序怎么写啊?
- 传值
- 求助~!如何利用JAVA修改修改UNIX中文件的文件名?急用~~~~~~~~~
- linux下如何实现应用程序不显示界面
- 关于java的包,我快晕死了,谁能给我一个明确的解释?
- 请问setModal()方法有什么用?
- 如何将jbuilder中的项目导出整个项目的UML图
- 菜鸟问题,有关JOptionPane.showInputDialog
- 重新回到java阵营,大散分(500)(请斑竹留情)元旦后就揭帖,祝各位新年快乐!大家的努力会让冬天赶快过去,呵呵!
- 有没有人用过jrun,能否讲解一下最基本的用法,送100分
- 一道关于循环的题(随机生成10个不重复的数字)
- 如何用java实现excel表格的加密
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;public class Exercise16_23 extends JFrame { public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new Exercise16_23();
frame.pack();//估计也算一次
frame.setTitle("Exercise16_23");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//这里绝对是一次
}
public Exercise16_23() {
add(new DrawPoint());
}
class DrawPoint extends JPanel {
private ArrayList<Point> list = new ArrayList<Point>();
private int x ;
private int y ;
public DrawPoint() {
setPreferredSize(new Dimension(600,600));
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
repaint();
}
});
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
x = (int)(Math.random()*400);
y = (int)(Math.random()*400);
list.add(new Point(x,y));//你在这里添加Point,每次调用paintComponent都会添加一个新的Point。
for(int i=0;i<list.size();i++) {
g.drawOval(list.get(i).x, list.get(i).y, 10, 10);
}
System.out.println(list);
}
}}
paintComponent方法不是只有你才能调用的,java自己也会调用。
只要窗口需要重绘,不管调用的是repaint()还是update(),最后都会调用到这个方法
比如窗口大小变化,显示消失。
所以在你点鼠标之前出现了三个点,说明系统已经执行过三次这个方法了。具体哪三次我不清楚。但是窗口出现占了一个。另外两次我估计,只是估计是pack()和setTitle()
x = (int)(Math.random()*400);
y = (int)(Math.random()*400);
list.add(new Point(x,y));//你在这里添加Point,每次调用paintComponent都会添加一个新的Point。
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;public class Exercise16_23 extends JFrame { public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new Exercise16_23();
frame.pack();
frame.setTitle("Exercise16_23");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public Exercise16_23() {
add(new DrawPoint());
}
class DrawPoint extends JPanel {
private ArrayList<Point> list = new ArrayList<Point>();
private int x ;
private int y ;
private int count = 0;
public DrawPoint() {
setPreferredSize(new Dimension(600,600));
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
count++;//这里添加了一个计数器
repaint();//这里是刷新再画
}
});
}
protected void paintComponent(Graphics g) {第一次画图跟监听器无关, 重鼠标按下开始, 再重画
super.paintComponent(g);
x = (int)(Math.random()*400);
y = (int)(Math.random()*400);
if (count > 0) {//当count>0时开始画,
list.add(new Point(x,y));
for(int i=0;i<list.size();i++) {
g.drawOval(list.get(i).x, list.get(i).y, 10, 10);
}
System.out.println(list);
}
}
}}希望有用 我也很菜