Stworzylem sobie wlasny MyPanel ktory dziedziczy po JPanel.
public class MyPanel extends JPanel {
final Counter knotIndex = new Counter(0);
final ArrayList <Knot> graph = new ArrayList<Knot>();
public MyPanel(){
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if(knotIndex.isDrawKnots()){
if(e.getClickCount()==2){
Knot knot = new Knot();
knot.setNr(knotIndex.getIndex());
knot.setNazwa(JOptionPane.showInputDialog("Podaj nazwe: "));
knot.setX(e.getX());
knot.setY(e.getY());
knot.paint(getGraphics());
knotIndex.increase();
graph.add(knot);
}
}
}});
}
@Override
protected void paintComponent (Graphics g) {
System.out.println("::rysuje Panel");
super.paintComponent(g);
}
}
}
A moj kod dla klasy Knot wyglada:
public class Knot extends Canvas{
int nr;
String nazwa;
int x;
int y;
public Knot( ){
System.out.println("Nowy obiekt: Knot");
}
public String getNazwa() {
return nazwa;
}
public void setNazwa(String nazwa) {
this.nazwa = nazwa;
}
public int getNr() {
return nr;
}
public void setNr(int nr) {
this.nr = nr;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public void paint(Graphics g){
System.out.println("::Test, rysuje knot");
super.paint(g);
g.fillOval(this.getX(),this.getY(), 20, 20);
}
}
Klasa Main:
public class Main {
public static void main(String[] args) {
JFrame fram = new JFrame();
fram.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
fram.add(panel);
fram.setSize(new Dimension(500,500));
fram.setVisible(true);
}
}
Wszystko smiga tylko ze mam dwa ale:
- Rysunek Knota (kolo) znika po rozciagnieciu okna albo zminimalizowaniu
- Wiem ze nie powinno sie wywoływać recznie metody paint(), jednak gdy robie repaint na obiekcie Knot to nic sie nie dzieje.
Szczerze mowiac troche bladze, na czuja rozszerzylem klase Knot o Canvas bo pozwala na przeladowanie paint(). Mozna to w ten sposob zalatwic ? Czego brakuje, co jest zle...
I nie wiem dokladnie jak to jest z tym przekazywaniem graphics do metody paint()...
Czuje ze ten obiekt Knot nie wie gdzie ma sie przerysowac, dobrze mysle ?
Tak jak mowie, chodzi ale wiem ze jest zle i sie wykrzacza przy manipulowaniu oknem.
Fachowe rady w jezyku dla beginnera mile widziane :)
Dzieki!