你能帮助我如何编程:
我有一个jPanel作为图形区域,我想从绘图中生成一条线,我有一个随机距离和一个随机alpha。 问题是第一个点是在这个jPanel中,第二个点是从这个jPanel出来的。 我想绘制休息线,从另一部分,这个图像解释我想做什么:
测试是:
if(y1<0){
tmp_x=x1;
tmp_y=y1;
x1= (x1-(Math.abs(y1)*(x1-x))/(Math.abs(y-y1)));
y1=0;
g.drawLine(x, y, x1, y1);
System.out.println("(x,y);(x1,y1): ("+x+","+y+");"+"("+x1+","+y1+")");
x=x1;
y=jPanel1.getHeight();
x1=tmp_x;
y1=jPanel1.getHeight()-Math.abs(tmp_y);
}
if(y1>jPanel1.getHeight()){
tmp_x=x1;
tmp_y=y1;
x1=x1-(Math.abs(Math.abs(y1-y)-Math.abs(y1-jPanel1.getHeight())))*(x1-x)/(Math.abs(y1-y));
y1=jPanel1.getHeight();
g.drawLine(x, y, x1, y1);
System.out.println("(x,y);(x1,y1): ("+x+","+y+");"+"("+x1+","+y1+")");
x=x1;
y=0;
x1=tmp_x;
y1=tmp_y-jPanel1.getHeight();
}
if(x1<0){
tmp_x=x1;
tmp_y=y1;
y1= (y1-(Math.abs(x1)*(y1-y))/(Math.abs(x-x1)));
x1=0;
g.drawLine(x, y, x1, y1);
System.out.println("(x,y);(x1,y1): ("+x+","+y+");"+"("+x1+","+y1+")");
y=y1;
x=jPanel1.getWidth();
y1=tmp_y;
x1=jPanel1.getWidth()-Math.abs(tmp_x);
}
if(x1>jPanel1.getWidth()){
tmp_x=x1;
tmp_y=y1;
y1=y1-(Math.abs(Math.abs(x1-x)-Math.abs(x1-jPanel1.getWidth())))*(y1-y)/(Math.abs(x1-x));
x1=jPanel1.getWidth();
g.drawLine(x, y, x1, y1);
System.out.println("(x,y);(x1,y1): ("+x+","+y+");"+"("+x1+","+y1+")");
y=y1;
x=0;
y1=tmp_y;
x1=tmp_x-jPanel1.getWidth();
}
问题出在哪里?
答案 0 :(得分:0)
使用Graphic对象,您可以绘制一条在画布的实际大小之外结束(或开始)的行。 Graphics对象具有理论上无限的表面,因此您可以绘制任何位置。
例如,你可以这样做:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JPanel {
public static void main(String[] args) {
JFrame frm = new JFrame();
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(200, 200);
frm.setVisible(true);
JPanel p = new Main();
frm.add(p);
}
@Override
public void paint(Graphics g) {
super.paint(g);
// Start outside
g.setColor(Color.RED);
g.drawLine(0, -100, 100, 100);
// End outside
g.setColor(Color.BLUE);
g.drawLine(100, 100, 0, 300);
// Start and end outside
g.setColor(Color.GREEN);
g.drawLine(-100, 100, 100, 100);
}
}
另请注意,您的代码有很多错误,例如,您只检查一个轴是否在外,但两者都可以在同一时间外。如果所有都在外面会发生什么,例如(-100,-100) - &gt; (-200,-200)?
您仍然可以这样做,但您需要更多检查。表格示例: