你的问题我看的不是很明白, 写了点东西,希望能帮助到你。 大概的思路是: 1:肯定需要一个线程。 2:需要一个画布JFrame,和一个移动的物体(继承自JComponent, 并且重写他的paint方法,在这里你可以决定这个物体是一个点还是什么的, 再调用repaint方法重画这个物体)。 3:定义了一个roadmap类,来描述画点的位置。 这个不好定义,你可以用一个list的东西,来放置计算好的位置。 如上面你所说的(显示它从这三个容器走过的轨迹),那么你肯定要在这个类中定义好你想要显示的每个位置。 import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JFrame; class Area extends JComponent{ RoadMap roadMap; public Area(RoadMap roadMap) { this.roadMap = roadMap; setBackground(Color.WHITE); setOpaque(true); } public void paint(Graphics g) { if (isOpaque()) { g.setColor(getBackground()); g.fillRect(getX(), getY(), getWidth(), getHeight()); } g.setColor(Color.BLUE); g.fill3DRect(roadMap.getPoint().x, roadMap.getPoint().y, 15, 15, true); } public void doTask(){ new Thread(){ public void run(){ while (true){ try{ this.sleep(50); Area.this.repaint(); }catch(Exception e){
} } } }.start(); } } class RoadMap{ private int i; private int j; private Point p=new Point(); public Point getPoint(){ p.x+=1; p.y+=1; return p; } }public class Test {
Area area = new Area(new RoadMap()); private void buildUI(Container container) { container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS)); container.add(area); area.setAlignmentX(Component.LEFT_ALIGNMENT); area.doTask(); }
public static void main(String[] args) { JFrame frame = new JFrame("Test"); frame.setPreferredSize(new Dimension(300,500)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Test controller = new Test(); controller.buildUI(frame.getContentPane()); frame.pack(); frame.setVisible(true); }}
写了点东西,希望能帮助到你。
大概的思路是:
1:肯定需要一个线程。
2:需要一个画布JFrame,和一个移动的物体(继承自JComponent,
并且重写他的paint方法,在这里你可以决定这个物体是一个点还是什么的,
再调用repaint方法重画这个物体)。
3:定义了一个roadmap类,来描述画点的位置。
这个不好定义,你可以用一个list的东西,来放置计算好的位置。
如上面你所说的(显示它从这三个容器走过的轨迹),那么你肯定要在这个类中定义好你想要显示的每个位置。
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
class Area extends JComponent{
RoadMap roadMap; public Area(RoadMap roadMap) {
this.roadMap = roadMap;
setBackground(Color.WHITE);
setOpaque(true);
} public void paint(Graphics g) {
if (isOpaque()) {
g.setColor(getBackground());
g.fillRect(getX(), getY(), getWidth(), getHeight());
}
g.setColor(Color.BLUE);
g.fill3DRect(roadMap.getPoint().x, roadMap.getPoint().y, 15, 15, true);
}
public void doTask(){
new Thread(){
public void run(){
while (true){
try{
this.sleep(50);
Area.this.repaint();
}catch(Exception e){
}
}
}
}.start();
}
}
class RoadMap{
private int i;
private int j;
private Point p=new Point();
public Point getPoint(){
p.x+=1;
p.y+=1;
return p;
}
}public class Test {
Area area = new Area(new RoadMap());
private void buildUI(Container container) {
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
container.add(area);
area.setAlignmentX(Component.LEFT_ALIGNMENT);
area.doTask();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setPreferredSize(new Dimension(300,500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Test controller = new Test();
controller.buildUI(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}}