首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JFrame实现DDA?

如何在JFrame实现DDA?
EN

Stack Overflow用户
提问于 2013-11-28 22:32:16
回答 1查看 1.9K关注 0票数 0

我尝试在Java上创建实现DDA绘制算法。我创建了JFrame表单和dda.java类。目前在JFrame只有一个按钮动作。我也不确定在JFrame类中实现DDA的情况。我认为,这可能是drawPixel方法的问题,但我对JFrame的实现完全不确定。我很感谢你的评论。

这是dda.java的绘制方法。

代码语言:javascript
复制
 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;
        }}

dda.java绘制像素的方法

代码语言:javascript
复制
private void drawPixel(int x1, int y1, Color BLACK) {
      g.drawOval(x1, y1, x1+5, y1+5); //can be mistake right here?
    }

JFrame类的一部分

代码语言:javascript
复制
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
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-29 00:54:13

您不应该使用getGraphics()进行自定义绘制,因为它是一个临时缓冲区,在下一次重新绘制时回收。你用paintComponent()作画吗?重写paintComponent()JPanelJComponent方法。有关更多信息和示例,请参见表演定制绘画。也见AWT和Swing中的绘画

drawPixel方法中也存在一个问题,因为椭圆的尺寸取决于坐标。尝试使用常量维数。fillOval可能更适合。下面是一个示例:

代码语言:javascript
复制
private void drawPixel(Graphics2D g, int x1, int y1) {
    g.fillOval(x1, y1, 3, 3);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20275661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档