Ahoj, potřeboval bych trochu poradit. Jedná se spíš o takový pokus než o nějakou konkrétní aplikaci. Ale zkrátka: zkouším si vytvořit třídu Platno která bude mít metodu s parametrem void kresli(Shape tvar) a dále chci mít třídu Ctverec, která bude mít metodu vykresli, kde zavolám metodu Platno.vykresli(ctverec) a na platno se vykreslí čtverec. Problém bude že mi trochu uniká, jak to s tím kreslicím nástrojem ( pojmenoval jsem si ho g2d ) vlastně je. Protože metoda kresli ve třídě Platno nekreslí. (?) Jsem co se týče grafiky v Javě naprostý začátečník a na webu jsem hledal a našel jsem pouze příklady, kde se vše zadá do void paint() ale já bych chtěl předávat této metod tvary, které by se následně kreslily. Budu vděčen za radu. Přikládám pro jistotu všechny třídy.
package obrazce;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import javax.swing.JPanel;
public class Platno extends JPanel {
public static Platno platno = null;
Color backGround = Color.orange;
private Graphics2D g2d;
private Platno() {
this.setBackground(backGround);
}
public static Platno getPlatno() {
if(platno == null) {
platno = new Platno();
return platno;
}
else
return platno;
}
@Override
public void paintComponent(Graphics g) {
System.out.println("paint comp");
super.paintComponent(g);
g2d = (Graphics2D) g;
}
public void kresli(Shape tvar) {
while(g2d == null) this.repaint(); // toto musím volat
// jinak se stane že tuto metodu zavolám ještě před tím než
// je inicializována proměnná g2d
// JE MI JASNÉ ŽE JE TO NAPROSTÁ PITOMOST, ALE NEVÍM JAK Z TOHO VEN
// TAK ABY TO FUNGOVALO
g2d.setColor(Color.black);
g2d.draw(tvar);
this.repaint();
}
}
package obrazce;
import java.awt.Rectangle;
public class Ctverec {
Platno platno;
int N;
public Ctverec(int N) {
this.N = N;
platno = Platno.getPlatno();
}
public void vykresli() {
Rectangle rg = new Rectangle(10, 10, 100, 100);
platno.kresli(rg);
}
}
Zbylé třídy:
package obrazce;
public class Main {
public static void main(String[] args) {
Okno okno = Okno.getOkno();
Ctverec ctv = new Ctverec(50);
ctv.vykresli();
}
}
package obrazce;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
public class Okno extends JFrame {
static public Okno okno = null;
int width = 400;
int height = 400;
private Okno() {
super("titulek");
this.setVisible(true);
setSize(width, height);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Vytvoreni platna
Platno pl = Platno.getPlatno();
pl.setPreferredSize(new Dimension(width, height));
this.add(pl);
this.pack();
}
public static Okno getOkno() {
if(okno == null) {
okno = new Okno();
return okno;
}
else
return okno;
}
}