How to find variable g in this code? I would like to draw line using fillRect from paintComponent. Please help.
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开发者_JAVA百科 = 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 + ")");
}
}
You need to override the paintComponent(Graphics g) method in the class that extends the JPanel, i.e. your Test class. You wrote a paintComponent method in a class DDA2 but that does nothing.
In the paintComponent method you can then call:
g.fillRect(x, y, w, h);
In addition to what Vincent says, it looks like you want to have the fillRect
taking place in your licz
method. No problem. Simply call your licz
method from the paintComponent
method. (It's easiest to do this if your method is defined in the same class as the paintComponent
method, by the way.)
精彩评论