如何根据动态坐标点,做出gui

lei0518 2010-11-26 12:31:58
麻烦各位前辈了,
想问个问题。想做个gui,条件如下
1。我有一套计算坐标点的公式,就是计算后是x,y位置,但位置不是整形的,并且位置一直变化的,我想让这些位置动起来。
2。做出gui.让点的显示到gui上。
3。从这些点中,我指定一个点。我可以控制这个点。比如控制行动方向。
可能说的复杂很难懂,说白了就是,
我想在界面中显示一堆小点点,前提是小点点的x、y的值,我都是已知的。就是我可以从本地文件txt中直接提取到的。
然后在这一堆小点点中,有一个我能控制的。
麻烦大家乐,最好大家能给讲讲方法,和给个例子 谢谢大家。
...全文
111 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lei0518 2010-11-29
  • 打赏
  • 举报
回复
怎么没人呢 奇怪了
lei0518 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunyiz 的回复:]
这个程序里面有很多你自定义的类啊
比如
ShipCondition
DecisionMakingBody
DecisionMakingReturn
这些类我不知道
不知道怎么修改哦

你说的那些功能其实不难
[/Quote]
555555555555555555
lei0518 2010-11-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tianyu945473925 的回复:]
现在问题解决了吗?
[/Quote]没有呢 很郁闷
tianyu945473925 2010-11-28
  • 打赏
  • 举报
回复
现在问题解决了吗?
lei0518 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunyiz 的回复:]
这个程序里面有很多你自定义的类啊
比如
ShipCondition
DecisionMakingBody
DecisionMakingReturn
这些类我不知道
不知道怎么修改哦

你说的那些功能其实不难
[/Quote]
好像修改的话 我是想知道我得到的数据,就是double型的 我怎么传到gui上呢,该如何传递呢,还有就是中断如何加入呢,其实您可以模拟几个double的数据,然后加上控制和中断,这样我应该能懂,麻烦了
lei0518 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunyiz 的回复:]
这个程序里面有很多你自定义的类啊
比如
ShipCondition
DecisionMakingBody
DecisionMakingReturn
这些类我不知道
不知道怎么修改哦

你说的那些功能其实不难
[/Quote]
是啊 我是新手 真的不会java现在在一点点的学 ,我就是没有思路 也不知道该怎么弄,所以很迷茫,您想知道什么类 ,我发给您,我的q 331986074 麻烦您了
sunyiz 2010-11-27
  • 打赏
  • 举报
回复
这个程序里面有很多你自定义的类啊
比如
ShipCondition
DecisionMakingBody
DecisionMakingReturn
这些类我不知道
不知道怎么修改哦

你说的那些功能其实不难
lei0518 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sunyiz 的回复:]
刚才那个画法效率有点差,现在程序小看不出来
以后大了就麻烦了,还是从开始就让楼主保持良好的习惯吧
哈哈


Java code
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.even……
[/Quote]
感谢您的程序 但是不是我想要的那个 我想要的是 我得到的是xy 但是是double型的
现在附上我的程序 麻烦大家了 还有就是我想要我控制的小点点,一开始我不操控,我点一个按钮后,然后我就可以操控了,一开始是随着那些小点点一起运动的。麻烦了
import java.util.Random;


public class kaku {

public static void main(String[] args){

/** Simulation Basic Data **/

int maximumVESSELS = 5 ;
// int simFIN = 11521 ; /** 8 Days **/
int simFIN = 120 ;
double dtMIN = 1.0 ; /** minute **/
double pi = 3.14159265358979323846 ;
double degToRAD = pi / 180.0 ;

ShipCondition[] shipSET = new ShipCondition[maximumVESSELS] ;
for( int i = 0 ; i < maximumVESSELS ; i++ ){
shipSET[i] = new ShipCondition() ;
}


for( int is = 0 ; is < maximumVESSELS ; is++ ){

shipSET[is].vesselID = is ;

shipSET[is].metaWeightGOAL = 10.0 ;
shipSET[is].goalSigA = 5.0 ;
shipSET[is].goalSigB = 1.0 ;
shipSET[is].metaWeightCONTRACT = 1.0 ;
shipSET[is].contractSigA = 10.0 ;
shipSET[is].contractSigB = 2.0 ;
shipSET[is].metaWeightEXPAND = 1.0 ;
shipSET[is].expandSigA = -10.0 ;
shipSET[is].expandSigB = 1.0 ;
shipSET[is].metaWeightClusterAVOID = 100.0 ;
shipSET[is].clusterAvoidSigA = -10.0 ;
shipSET[is].clusterAvoidSigB = 3.0 ;

shipSET[is].decisionMD = 6.0 ;
shipSET[is].dcpaJUDGE = 0.75 ;
shipSET[is].headOnDEG = 50.0 ;



shipSET[is].courseRadOLD = pi/2 ; /* Dummy */
shipSET[is].speedKtOLD = 30.0 ;
shipSET[is].courseRadNOW = pi/2 ; /* Dummy */
shipSET[is].speedKtNOW = 30.0 ;
shipSET[is].courseNaviRAD = pi/2 ; /* Dummy */
shipSET[is].speedNaviKT = 30.0 ;



shipSET[is]. goalRad=pi/2;

}

/****************************************************/
shipSET[0].xMileOLD = 0.0 ;
shipSET[0].yMileOLD = 0.0 ;
shipSET[0].xMileNOW =0.0 ;
shipSET[0].yMileNOW = 0.0 ;

/****************************************************/
shipSET[1].xMileOLD = 3.0 ;
shipSET[1].yMileOLD = 3.0 ;
shipSET[1].xMileNOW =3.0 ;
shipSET[1].yMileNOW = 3.0 ;

/****************************************************/
shipSET[2].xMileOLD =0.0 ;
shipSET[2].yMileOLD = 5.0 ;
shipSET[2].xMileNOW =0.0 ;
shipSET[2].yMileNOW = 5.0 ;
/****************************************************/
shipSET[3].xMileOLD =-3.0 ;
shipSET[3].yMileOLD = -3.0 ;
shipSET[3].xMileNOW =-3.0 ;
shipSET[3].yMileNOW = -3.0 ;
/****************************************************/
shipSET[4].xMileOLD = 0.0 ;
shipSET[4].yMileOLD = -5.0;
shipSET[4].xMileNOW =0.0 ;
shipSET[4].yMileNOW = -5.0 ;



Random rand = new Random() ;
// Random rand = new Random(2146351065) ;
for( int clock = 0 ; clock < simFIN ; clock++ ){

if(clock>=20&&clock<40)
shipSET[0].goalRad=pi/4;
if(clock>=40&&clock<60)
shipSET[0].goalRad=pi/2;

if(clock>=60&&clock<90)
shipSET[0].goalRad=3*pi/4;

if(clock>=90)
shipSET[0].goalRad=pi/2;




for( int givenSHIP= 0 ; givenSHIP < maximumVESSELS ; givenSHIP ++ ){


/*** Navigation -> Navigation (status = 0 --> 0) ***/


/********************************************************/
/***** Ship Cluster Behavior Model Calculation *****/
/********************************************************/
DecisionMakingReturn dmCoSp
= DecisionMakingBody.agentDecisionMaking(shipSET, givenSHIP, dtMIN);

/*** Quick Response ***/
shipSET[givenSHIP].xMileNEW
= shipSET[givenSHIP].xMileNOW + dmCoSp.dmSpeedKt
* dtMIN / 60.0 * Math.sin( dmCoSp.dmCourseRad ) ;
shipSET[givenSHIP].yMileNEW
= shipSET[givenSHIP].yMileNOW + dmCoSp.dmSpeedKt
* dtMIN / 60.0 * Math.cos( dmCoSp.dmCourseRad ) ;
shipSET[givenSHIP].courseRadNEW = dmCoSp.dmCourseRad ;
shipSET[givenSHIP].speedKtNEW = dmCoSp.dmSpeedKt ;







} /** FOR givenSHIP **/


double collisionJudgeDIST = 0.1 ;
for( int i = 0 ; i < maximumVESSELS ; i++ ){
int flagCC = 0 ;
if( shipSET[i].vesselSTATUS == 0 ){
for( int j = i+1 ; j < maximumVESSELS ; j++ ){
if( shipSET[j].vesselSTATUS == 0 ){
double x1 = shipSET[i].xMileNEW ;
double y1 = shipSET[i].yMileNEW ;
double x2 = shipSET[j].xMileNEW ;
double y2 = shipSET[j].yMileNEW ;
Point2D p1, p2 ;
p1 = new Point2D( x1, y1 ) ;
p2 = new Point2D( x2, y2 ) ;
double dist = p1.distance2D( p2 ) ;
if( dist < collisionJudgeDIST ) flagCC = 1 ;
}
}
}



System.out.println( clock + "," + i + "," +
shipSET[i].xMileNEW + "," +
shipSET[i].yMileNEW + "," +
flagCC);


}


/** State Transition **/
for( int i = 0 ; i < maximumVESSELS ; i++ ){
if( shipSET[i].vesselSTATUS == 0 ){
shipSET[i].xMileOLD = shipSET[i].xMileNOW ;
shipSET[i].yMileOLD = shipSET[i].yMileNOW ;
shipSET[i].courseRadOLD = shipSET[i].courseRadNOW ;
shipSET[i].speedKtOLD = shipSET[i].speedKtNOW ;
shipSET[i].xMileNOW = shipSET[i].xMileNEW ;
shipSET[i].yMileNOW = shipSET[i].yMileNEW ;
shipSET[i].courseRadNOW = shipSET[i].courseRadNEW ;
shipSET[i].speedKtNOW = shipSET[i].speedKtNEW ;
}
}

} /** FOR clock **/

}
ship{0}是我自己想控制的,能不能把我的程序加载到您的程序上呢,其实我就是想得到double型的,xy,显示到gui上,并且加个中断,就是我点一个按钮后,然后我可以进行控制 ,麻烦大家了。
lei0518 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunyiz 的回复:]
x,y 不是整数?
不过graphics还是以整数为坐标画点的
画的时候不是整数还是得转成整数的
我可不可以理解成这样~
楼主是想做一个类似于是男人撑过20秒的那种躲避类的东东?
[/Quote]
感谢您,不过我不是想做哪个是男人就撑过20秒那个 不过和这个很像的
lei0518 2010-11-26
  • 打赏
  • 举报
回复
因为我的坐标点是比如 经纬度之类的东西 其实可以理解成经纬度。
我是做个操船系统,
就是利用 经纬度 画出图像,然后操控其中的一个船,
sunyiz 2010-11-26
  • 打赏
  • 举报
回复
x,y 不是整数?
不过graphics还是以整数为坐标画点的
画的时候不是整数还是得转成整数的
我可不可以理解成这样~
楼主是想做一个类似于是男人撑过20秒的那种躲避类的东东?
lei0518 2010-11-26
  • 打赏
  • 举报
回复
大家写得这么快吗??? 我运行下 看看
sunyiz 2010-11-26
  • 打赏
  • 举报
回复
刚才那个画法效率有点差,现在程序小看不出来
以后大了就麻烦了,还是从开始就让楼主保持良好的习惯吧
哈哈

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MovePoint extends JFrame{

Point[] points = new Point[10];
Point you;
MyPanel pnlMain;
Timer timer;
TimerTask task;

public MovePoint(){
initialize();
}

private void initialize() {
you = new Point(150,150);//可控点
for (int i=0;i<points.length;i++) {
points[i] = new Point(i*10, i*10);//模拟你的随机点
}
this.setSize(300,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnlMain = new MyPanel();
timer = new Timer();
task = new TimerTask() {
public void run() {
for (Point point : points) {
Point oldPoint = new Point();
oldPoint.x = point.x;
oldPoint.y = point.y;
point.x++;
point.y++;
if (point.x>300) {
point.x = 0;
}
if (point.y>300) {
point.y = 0;
}
pnlMain.repaint(point.x,point.y,4,4);//控制重绘区域
pnlMain.repaint(oldPoint.x,oldPoint.y,4,4);//控制重绘区域
}
}
};
timer.schedule(task, 0, 100);
this.getContentPane().add(pnlMain);
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {//事件监听
int code=e.getKeyCode();
switch (code) {
case KeyEvent.VK_UP:
you.y--;
pnlMain.repaint(you.x, you.y, 4, 5);//控制重绘区域
break;
case KeyEvent.VK_DOWN:
you.y++;
pnlMain.repaint(you.x, you.y-1, 4, 5);//控制重绘区域
break;
case KeyEvent.VK_LEFT:
you.x--;
pnlMain.repaint(you.x, you.y, 5, 4);//控制重绘区域
break;
case KeyEvent.VK_RIGHT:
you.x++;
pnlMain.repaint(you.x-1, you.y, 5, 4);//控制重绘区域
break;
}
}
});
}

class MyPanel extends JPanel {

public MyPanel(){

}

@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.GREEN);
for (Point point : points) {
g.fillRect(point.x, point.y, 4, 4);
}
g.setColor(Color.RED);
g.fillRect(you.x, you.y, 4, 4);
}
}

public static void main(String[] args) {
MovePoint frame = new MovePoint();
frame.setVisible(true);
}
}
sunyiz 2010-11-26
  • 打赏
  • 举报
回复
写了个例子给你参考一下
sunyiz 2010-11-26
  • 打赏
  • 举报
回复


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MovePoint extends JFrame{

Point[] points = new Point[10];
Point you;
MyPanel pnlMain;
Timer timer;
TimerTask task;

public MovePoint(){
initialize();
}

private void initialize() {
you = new Point(150,150);//可控点
for (int i=0;i<points.length;i++) {
points[i] = new Point(i*10, i*10);//模拟你的随机点
}
this.setSize(300,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnlMain = new MyPanel();
timer = new Timer();
task = new TimerTask() {
public void run() {
for (Point point : points) {
point.x++;
point.y++;
if (point.x>300) {
point.x = 0;
}
if (point.y>300) {
point.y = 0;
}
repaint();
}
}
};
timer.schedule(task, 0, 100);
this.getContentPane().add(pnlMain);
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {//事件监听
int code=e.getKeyCode();
switch (code) {
case KeyEvent.VK_UP:
you.y--;
repaint();
break;
case KeyEvent.VK_DOWN:
you.y++;
repaint();
break;
case KeyEvent.VK_LEFT:
you.x--;
repaint();
break;
case KeyEvent.VK_RIGHT:
you.x++;
repaint();
break;
}
}
});
}

class MyPanel extends JPanel {

public MyPanel(){

}

@Override
public void paint(Graphics g) {
g.setColor(Color.GREEN);
for (Point point : points) {
g.fillRect(point.x, point.y, 4, 4);
}
g.setColor(Color.RED);
g.fillRect(you.x, you.y, 4, 4);
}
}

public static void main(String[] args) {
MovePoint frame = new MovePoint();
frame.setVisible(true);
}
}

248

社区成员

发帖
与我相关
我的任务
社区描述
其他产品/厂家
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧