Java 如何在JFrame上实现DDA?
我尝试在Java中创建DDA线条绘制算法的实现。我创建了JFrame表单和dda.java类。此时JFrame只有一个按钮动作。我不确定在JFrame类中是否实现DDA。我认为,drawPixel方法可能有问题,但我根本不确定JFrame的实现。我感谢你的评论 这是在dda.javaJava 如何在JFrame上实现DDA?,java,swing,jframe,drawing,dda,Java,Swing,Jframe,Drawing,Dda,我尝试在Java中创建DDA线条绘制算法的实现。我创建了JFrame表单和dda.java类。此时JFrame只有一个按钮动作。我不确定在JFrame类中是否实现DDA。我认为,drawPixel方法可能有问题,但我根本不确定JFrame的实现。我感谢你的评论 这是在dda.java void drawLineDDA(Graphics2D g) { dx=(double)(x2-x1); dy=(double)(y2-y1); double m=
void drawLineDDA(Graphics2D g) {
dx=(double)(x2-x1);
dy=(double)(y2-y1);
double m=Math.abs(dy/dx);
double absx=Math.abs(dx);
double absy=Math.abs(dy);
double px = absx/p;
double py = absy/p;
int p=0;
float slope = 1;
if(y1==y2){
if(x1==x2) return; //it is not a line, nothing happened
slope = 0;
absx = 1;
absy = 0;
p=(int) (dx/absx); //p means number of steps
}
else if(x1==x2){
slope = 2;
absx = 0;
absy = 1;
p = (int) (dy/absy);
}
else{
slope = (float) (dy/dx);
absx=1;
absy=slope*absx;
p= (int) ((dy/absy > dx/absx) ? dy/absy : dx/absx);
}
for(int i = 0; i <=p;i++){
drawPixel(x1,y1,Color.BLACK);
x1 += absx;
y1 += absy;
}}
JFrame类的一部分
public class NewJFrame extends javax.swing.JFrame {
int x1,x2,y1,y2;
Graphics2D g;
dda d;
public NewJFrame() {
this.d = new dda(20,30,20,50); //maybe this is not good?
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
g = (Graphics2D) jPanel1.getGraphics();
d.drawLineDDA(g); // and I am definielly not sure about this
}
对于自定义绘制,不应使用
getGraphics()
,因为它是一个临时缓冲区,在下次重新绘制时会循环使用。是否在paintComponent()
中绘制。重写JComponent
或JPanel
的paintComponent()
方法。有关更多信息和示例,请参阅。另见
drawPixel
方法中也存在一个问题,因为椭圆形的尺寸取决于坐标。尝试使用常量维度<代码>圆角可能更合适。以下是一个例子:
private void drawPixel(Graphics2D g, int x1, int y1) {
g.fillOval(x1, y1, 3, 3);
}
“我对JFrame类的DDA实现不太确定。”你对什么不确定?这个问题很模糊。代码中的注释定义了我不确定的行。
private void drawPixel(Graphics2D g, int x1, int y1) {
g.fillOval(x1, y1, 3, 3);
}