2

このコードで変数 g を見つける方法は? paintComponent から fillRect を使って線を描きたいと思います。助けてください。

import java.awt.*;
import java.lang.String.*;
import java.util.Scanner;
import java.io.IOException;
import javax.swing.*;

class Test extends JPanel {
    public static void main(String[] args) {
        String x1;
        String x2;
        String y1;
        String y2;

        Scanner sc = new Scanner(System.in);
        System.out.print("Podaj pierwsza wspolrzedna pierwszego punktu: ");
        x1 = sc.nextLine();
        System.out.print("Podaj druga wspolrzedna pierwszego punktu: ");
        x2 = sc.nextLine();
        System.out.print("Podaj pierwsza wspolrzedna drugiego punktu: ");
        y1 = sc.nextLine();
        System.out.print("Podaj druga wspolrzedna drugiego punktu: ");
        y2 = sc.nextLine();

        Test nowy = new Test();
        DDA2 dda2 = new DDA2();
        dda2.licz(x1, x2, y1, y2);

        JFrame ramka = new JFrame();
        ramka.setSize(300,300);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.getContentPane().add(new Test());
        ramka.setVisible(true);

    }


}



class DDA2 {
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.RED);
    }



    public void licz(String xx1, String xx2, String yy1, String yy2){
        double dxx1 = Double.parseDouble(xx1);
        double dxx2 = Double.parseDouble(xx2);
        double dyy1 = Double.parseDouble(yy1);
        double dyy2 = Double.parseDouble(yy2);
        double dx = dxx2 - dxx1;
        double dy = dyy2 - dyy1;

        if (Math.abs(dx) >= Math.abs(dy))
        {
            double m = Math.abs(dx);
            System.out.println("DX" + m);
        }
        else
        {
            // ALGORYTYM PRZYROSTOWY
            double m = Math.abs(dy);
            //System.out.println("DY" + m);
            double x = dxx1;
            double y = dyy1;
            for (int i=1; i <= m; i++)
            {
                x = x + dx/m;
                y = y + dy/m;
                g.fillRect((int) x, (int) y, 1, 1);
            }
        }   

    System.out.println("Wspolrzednie punktu pierwszego to: " + "(" + dxx1 + "; " + dxx2 +")");
    System.out.println("Wspolrzednie punktu drugiego to: " + "(" + dyy1 + "; " + dyy2 + ")");
    }
}
4

2 に答える 2

2

JPanel を拡張するクラス、つまり Test クラスで paintComponent(Graphics g) メソッドをオーバーライドする必要があります。クラス DDA2 に paintComponent メソッドを書きましたが、それは何もしません。

次に、paintComponent メソッドで以下を呼び出すことができます。

    g.fillRect(x, y, w, h);
于 2011-04-10T14:08:57.643 に答える
1

ヴィンセントの言うことに加えて、あなたは自分の方法fillRectで起こっていることを望んでいるようです. licz問題ない。liczメソッドからメソッドを呼び出すだけpaintComponentです。(ちなみに、メソッドがメソッドと同じクラスで定義されている場合、これを行うのが最も簡単ですpaintComponent。)

于 2011-04-10T14:16:23.020 に答える