import java.awt.*;
import java.awt.event.*;import java.util.*;public class test17 extends Frame
{
int x0,y0,x1,y1;
public test17()
{
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
x0 = e.getX();
y0 = e.getY();
}
public void mouseReleased(MouseEvent e)
{
x1 = e.getX();
y1 = e.getY();
repaint();
}
});
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
this.setSize(600, 400);
this.setVisible(true);
} public void paint(Graphics g)
{
this.getGraphics().drawLine(x0, y0, x1, y1);
}
public static void main(String[] args)
{
new test17();
}
}
画第一条直线,再画另二条,第一条的直线消失了,再画第三条,第二条又消失了...
如何重绘原来画过的直线?
import java.awt.event.*;import java.util.*;public class test17 extends Frame
{
int x0,y0,x1,y1;
public test17()
{
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
x0 = e.getX();
y0 = e.getY();
}
public void mouseReleased(MouseEvent e)
{
x1 = e.getX();
y1 = e.getY();
repaint();
}
});
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
this.setSize(600, 400);
this.setVisible(true);
} public void paint(Graphics g)
{
this.getGraphics().drawLine(x0, y0, x1, y1);
}
public static void main(String[] args)
{
new test17();
}
}
画第一条直线,再画另二条,第一条的直线消失了,再画第三条,第二条又消失了...
如何重绘原来画过的直线?
将以前画过的线都保存起来,比如2个点的坐标,然后在这里全部重画
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class test17 extends Frame {
// int x0, y0, x1, y1;
private int point[] = new int[10000];
private int x;
public test17() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
point[x ++] = e.getX();
point[x ++] = e.getY();
} public void mouseReleased(MouseEvent e) {
point[x ++] = e.getX();
point[x ++] = e.getY();
repaint();
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
this.setSize(600, 400);
this.setVisible(true);
} public void paint(Graphics g) {
for(int i = 0, len = point.length / 4; i < len; i = i + 4) {
g.drawLine(point[i], point[i + 1], point[i + 2], point[i + 3]);
}
} public static void main(String[] args) {
new test17();
}
}
---------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class test17 extends JFrame { //父类改用软件包swing中的JFrame
boolean deletePrevious = true; //是否抹去前一幁图画?
int x0,y0,x1,y1;
public test17() { addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
x0 = e.getX();
y0 = e.getY();
}
public void mouseReleased(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
repaint();
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose(); }
});
Container container = getContentPane();
setSize(600, 400);
setVisible(true);
} public void paint(Graphics g){
if (deletePrevious)//是否抹去前一幁图画, 若·deletePrevious 为true,则抹去。
super.paint(g); //调用超类的画法paint(), 会抹去原先得图画,我只在生成画布时调用一次父类的paint()
g.drawLine(x0, y0, x1, y1);
deletePrevious = false; //今后不再调用父类的paint()方法,不再抹去原来的线段。
}
public static void main(String[] args) {
new test17();
}
}
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;import javax.swing.JFrame;public class TankBar extends JFrame
{
public static final int Game_Width=800;
public static final int Game_Height=600;
private int x = 50, y = 50;
Image offScreenImage = null; public TankBar()
{
setTitle("坦克游戏");
setBounds(200, 200, Game_Width, Game_Height);
init();
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setBackground(Color.GREEN);
setResizable(false); } private void init()
{
this.addKeyListener(new KeyMonitor());
setVisible(true);
new Thread(new PaintThread()).start();
} public static void main(String[] args)
{
new TankBar().setVisible(true);
} public void paint(Graphics g)
{
super.paint(g);
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 30, 30);
g.setColor(c);
} //这段代码好像没起到作用
public void update(Graphics g)
{
super.paint(g);
if (offScreenImage == null)
{
offScreenImage = this.createImage(Game_Width, Game_Height);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0, 0, Game_Width, Game_Height);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
} class PaintThread implements Runnable
{ public void run()
{
while (true)
{
repaint();
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
} }
class KeyMonitor extends KeyAdapter
{ public void keyPressed(KeyEvent e)
{
int key=e.getKeyCode();
switch(key)
{
case KeyEvent.VK_RIGHT:
x+=5;
break;
case KeyEvent.VK_LEFT:
x-=5;
break;
case KeyEvent.VK_UP:
y-=5;
break;
case KeyEvent.VK_DOWN:
y+=5;
break;
}
}
}
}
请问我这个 闪烁的问题怎么还没有解决