所以我是stackoverflow的新手。
我即将创建一条线,一条三角形,但我只是专注于线条和良好的面向对象编程。
所以我创建了Point2D类:
package draw;
/**
*
* @author Pedro
*/
public class Point2D {
private int x,y;
// Construtores
public Point2D(){
this(0,0);
}
public Point2D(int x, int y){
this.x=x;
this.y=y;
}
// Set's e Get's
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
稍后我使用class point2D创建类行以获得起点和终点
package draw;
/**
*
* @author Pedro
*/
public class Linha extends Figura{
private Point2D pinicial;
private Point2D pfinal;
//construtores
public Linha(int xinicial, int yinicial, int xfinal, int yfinal){
pinicial=new Point2D(xinicial, yinicial);
pfinal=new Point2D(xfinal, yfinal);
}
public Linha(Point2D pinicial, Point2D pfinal){
this.pinicial=pinicial;
this.pfinal=pfinal;
}
//Get's e Set's
public Point2D getPinicial() {
return pinicial;
}
public void setPinicial(Point2D pinicial) {
this.pinicial = pinicial;
}
public Point2D getPfinal() {
return pfinal;
}
public void setPfinal(Point2D pfinal) {
this.pfinal = pfinal;
}
}
然后我用一个名为“line”的按钮创建了一个Jframe,并在jFrame中放置了一个面板,该面板将用于绘制线条。
问题是......我不知道如何绘制线条或者我应该如何计算它。
你能帮助我吗?
答案 0 :(得分:4)
简单地说,在您的JPanel类ovverride paintComponent()
方法中:
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g)
g.drawLine(x1, y1, x2, y2);
}
}
x1
,y1
,x2
和y2
是您线路的线索。
如果您只想在按下按钮后绘制线条,请在主类中创建一个全局boolean
变量,按下该按钮时,将其设置为true,然后在创建JPanel时执行:< / p>
JPanel panel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
if (myBoolean) {
super.paintComponent(g)
g.drawLine(x1, y1, x2, y2);
}
}
}
答案 1 :(得分:1)
虽然在另一个答案中给出的建议太好了,但是却无法阻止自己,只要添加一两个字,就像为了进行绘画一样,你需要调用{{ 1}},来自附加到repaint()
的{{1}}内部。
正如@camickr所说,在扩展类中使用actionPerformed
进行绘制,这将提供一个有效的临时区域,需要完成绘图。这个example也可能在这个方向上有所帮助。
此外,如果你想保留迄今为止在JButton
上绘制的所有行,那么你只需将它们存储在getPreferredSize()
中并迭代Board
每当要绘制新线时,再次绘制它们。
一个简单的例子如下:
List