问题描述
所以在下面我们有我的代码,它应该使用经度和纬度来绘制您在地图上的位置。启动时,它会尝试通过遍历每个值的循环来查找最大和最小长度/纬度。 之后,它初始化数组,然后通过存储在列表中的所有 TrackPoints 进行循环。 最后它应该画一条线但是当代码使用 main 执行时,JFrame 是空的。我尝试了多种方法,但仍然是一个空框架。我还是新手,很抱歉给您带来不便。
import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import csv.CSVReader;
import csv.TrackPoint;
import gui.Login;
public class Position extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
CSVReader activity = new CSVReader();
private List<TrackPoint> trackPoints;
double minLat;
double minLon;
double maxLat;
double maxLon;
public void paintComponent(Graphics g) {
this.trackPoints = activity.getTrackpointList();
super.paintComponent(g);
findMaxMinLongLat();
// Initialize arrays
int[] xArray = new int[activity.trackPoints.size()];
int[] yArray = new int[activity.trackPoints.size()];
// Loop through all TrackPoints stored in the list
int i = 0;
for (TrackPoint tp : trackPoints) {
xArray[i] = getXPixValue(tp);
yArray[i] = getYPixValue(tp);
i++;
}
g.setColor(Color.BLUE);
g.drawpolyline(xArray,yArray,xArray.length);
}
private void findMaxMinLongLat() {
// just to start with some value:
minLat = activity.trackPoints.get(0).getLatitude();
minLon = activity.trackPoints.get(0).getLongitude();
maxLat = activity.trackPoints.get(0).getLatitude();
maxLat = activity.trackPoints.get(0).getLongitude();
// Finds min and max:
for (TrackPoint tp : trackPoints) {
double lon = tp.getLongitude();
double lat = tp.getLatitude();
if (lon > maxLon)
maxLon = lon;
else if (lon < minLon)
minLon = lon;
if (lat > maxLat)
maxLat = lat;
else if (lat < minLat)
minLat = lat;
}
}
private int getXPixValue(TrackPoint tp) {
int xPix = (int) (((tp.getLongitude() - minLon) / (maxLon - minLon)) * getWidth());
return xPix;
}
private int getYPixValue(TrackPoint tp) {
int yPix = (int) (((tp.getLatitude() - minLat) / (maxLat - minLat)) * getHeight());
yPix = getHeight() - yPix; // To adjust for y-axis going "downwards" in graphics
return yPix;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(300,200);
frame.setDefaultCloSEOperation(JFrame.disPOSE_ON_CLOSE);
panel.add(new Position());
frame.add(panel);
frame.setVisible(true);
}
}
解决方法
您的“位置”面板没有首选尺寸。您将其添加到默认布局为 FlowLayout 的 JPanel,该布局不会展开内容。
一个修复,使用将填充内容的布局。
panel.setLayout( new BoxLayout(panel,BoxLayout.PAGE_AXIS) );
另一种方法是将其直接添加到 JFrame 中,该 JFrame 具有一个带有 BorderLayout 的内容窗格(另一种布局将扩展您的组件以填充空间。)。