2017-05-30 69 views
0

我需要創建一個按鈕,它執行一些計算並給我一個列表,並且需要在我的paint中使用該列表並創建這些座標的行。對於我來說,將事件監聽器的數據發送到我的paint方法的最佳方式是什麼?謝謝!如何將數據從事件監聽器發送到paintComponent

+2

可以請你提供更多的信息?你試過什麼了? 問題越好,答案越好。 – Gewure

回答

0

你不給我們足夠的信息,你問了很多東西,所以這裏是一個粗略的大綱,讓你開始使用awt/swing按鈕,你可以從那裏查找其餘的東西,或者詢問更具體的問題,比如如何設置自定義繪畫等。請參閱以下代碼中的註釋和解釋。

創建一個公開可用的數組或列表來存儲您的座標。這就是我們將使用共享的事件偵聽器和您的paint方法之間的信息:

public static LinkedList<Point> myCoOrdinateList = new LinkedList<>(); 

添加動作監聽你的按鈕是這樣的:

myButton.addActionListener(new java.awt.event.ActionListener() 
{ 
    public void actionPerformed(java.awt.event.ActionEvent evt) 
    { 
     //do something to get your new co-ords/point 
     //  
     //your code here to get X and Y 

     //assign X and Y to a point: 
     Point myNewPoint = new Point(X, Y); 

     //add that point to the list 
     myCoOrdinateList.add(myNewPoint); 

     //repaint your graph or your custom paint component here (or whatever else you are drawing these lines to): 
     myComponent.repaint(); 
    } 
}); 

如果你正在做的畫通過重寫組件的paint方法,那麼你可以添加你的paint方法是這樣的:

//create graphics so we can draw lines 
Graphics2D g2d = (Graphics2D) g; 
//we need to work with 2 points so we will store one point here: 
Point previous = new Point(0, 0); 
for (Iterator<Point> iterator = myCoOrdinateList.iterator(); iterator.hasNext();) 
{ 
    //get point 
    Point nextPoint = iterator.next(); 
    //link previous point and next pint in the co-ordinates list: 
    g2d.drawLine(previous.x, previous.y, nextPoint.x, nextPoint.y); 
    //set new previous point so the next line is ready to be drawn 
    previous = nextPoint; 
} 

下面是來自官方的Java教程一些更多的信息。我建議你在問任何問題之前先閱讀這些鏈接。

自畫: https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html

與圖形/繪圖工作的事情: https://docs.oracle.com/javase/tutorial/2d/index.html

與擺動按鈕方面的更多信息: https://docs.oracle.com/javase/tutorial/uiswing/components/button.html