我需要创建一个按钮来执行一些计算并给我一个列表,我需要在我的绘画中使用该列表并创建这些坐标的行。什么是我将事件监听器中的数据发送到我的paint方法的最佳方式?谢谢!
答案 0 :(得分: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