0
我想弄清楚如何迭代傳入數據點並在數據點進入時在JPanel上繪製圖形。要開始我只是試圖迭代列表DataPoints並繪製每一行(調用repaint)。我曾嘗試幾種方法可以做到這一點,但沒有運氣....Java Swing嘗試迭代列表並繪製每行
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MyPanel extends JPanel{
protected int x1 = 0;
protected int x2 = 0;
protected int y1 = 0;
protected int y2 = 0;
public MyPanel(){
iteratePoints();
}
/**
* @param args
*/
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(new MyPanel());
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
System.out.println("In print");
g.drawLine(x1, y1, x2, y2);
};
private void iteratePoints(){
System.out.println("iteratepoints");
ArrayList<DataGrid> dataList = new ArrayList<DataGrid>();
dataList.add(new DataGrid(0,4));
dataList.add(new DataGrid(5,14));
dataList.add(new DataGrid(10,1));
dataList.add(new DataGrid(15,10));
dataList.add(new DataGrid(20,14));
dataList.add(new DataGrid(25,1));
for(int i = 0; i<dataList.size(); i++)
{
x2 = dataList.get(i).x;
y2 = dataList.get(i).y;
this.repaint();
x1 = x2;
y1 = y2;
}
}
private class DataGrid
{
public int x, y;
DataGrid(int x, int y)
{
this.x = x;
this.y = y;
}
}
}
使您的列表成爲您班級的一個領域,而不是那些x和y變量。在你的paintComponent方法中,迭代線條並對其進行重複。 –
問題在於,這些點最終會來自眼動儀(每幀)。所以我需要一種方法來繪製每一行,如果我將每行添加到列表並將其迭代到paintComponent中,那麼每一幀的整個列表將不得不重新迭代並重新繪製。這是做這件事的最好方法嗎? – jbg2408
這可能就足夠了。 camickr在他的回答中告訴你,你也可以畫一個BufferedImage。 –