Problem z uruchomieniem metody rysującej.

Odpowiedz Nowy wątek
2006-11-14 21:02
0

Witam !!

Poniżej przedstawiam kod:

import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class obslugaObrazu extends JFrame {

private Image tlo;
private Image sciana;
private boolean obrazkiWgrane;

//private GraphicsDevice device; // co tutaj sie dzieje ? - czy to odwołanie do obiektu klasy GraphicsDevice?

JFrame window = new JFrame();

DisplayMode displayMode = new DisplayMode(1024, 768, 16,DisplayMode.REFRESH_RATE_UNKNOWN);
//REFRESH daje to ze nie wywala wyjątku i sam dostraja

GraphicsEnvironment environment =
    GraphicsEnvironment.getLocalGraphicsEnvironment();

GraphicsDevice device = environment.getDefaultScreenDevice();

public void inicjujObraz(){

window.setUndecorated(true);
window.setResizable(false);

device.setFullScreenWindow(window);

// change the display mode
device.setDisplayMode(displayMode);

}

public void zamknijObraz() {

        Window window = device.getFullScreenWindow();
        if (window != null) {
            window.dispose();
        }
        device.setFullScreenWindow(null);// przelancza na tryb ktory byl wczesniej
    }

private Image loadImage(String fileName) {
        return new ImageIcon(fileName).getImage(); // tworzy obiekty z pobranych obrazów
    }

public void wczytajObrazki() {

       tlo = loadImage("space.jpg"); //obiekt tlo

    sciana = loadImage("brick.png");//obiekt sciana

        Image robbo1 = loadImage("robbo1.png");
        Image robbo2 = loadImage("robbo2.png");
        Image robbo3 = loadImage("robbo3.png");

        obrazkiWgrane = true;

        repaint();
    }

public void rysujCalosc(Graphics g){

            g.drawImage(tlo, 0, 0,null);

          Tablica zmiennaTablicy = new Tablica(); //czy tutaj trzeba tworzyć obiekt ?? lub jak zrobić odwolanie 

          zmiennaTablicy.stworzTablice();

          for (int y=0 ; y<24 ; y++){
          for (int x=0 ; x<32; x++){

                if(zmiennaTablicy.pobierzElementTablicy(x,y)=='a')

                g.drawImage(sciana, x*32,y*32,null);

          }
    }

}

}

Do ostatniej metody w powyższym kodzie wszystko szło "w miarę dobrze". Istota problemu prawdopodobnie tkwi w moim niezrozumieniu programowania obiektowego. Założeniem jest by klasa obsługaObrazu miała metody:
inicjalizacjaObrazu() -> uruchomienie wyświetlenie pustej grafiki, zamkniecieObrazu() - wylaczenie grafiki i calego programu, rysujCalosc() - rysuje wszsytko z tablicy, i rysujZmiany() - rysuje wybrane.
Wyobrażam sobie ze to powinno działać tak, że metoda main znajdujaca sie w innym pliku wywołuje je w sposób następuący :

import java.io.*;
import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

class Main
{

  public static void main(String args[])
  {

Tablica tablica = new Tablica();

tablica.stworzTablice();
System.out.println(tablica.pobierzElementTablicy(0,0));//tutaj sprawdzam czy czyta dobrze

tablica.updateTablice(0,0,'d');

System.out.println(tablica.pobierzElementTablicy(0,0));//czy zrobilo update

obslugaObrazu xxx = new obslugaObrazu();

xxx.inicjujObraz();
  xxx.wczytajObrazki();

  xxx.rysujWszystko();//tutaj kompilator zglasza błąd "cannot find symbol"
 //xxx.zamknijObraz(); 
  }

}

Pytanie brzmi: jak wywołać metodę rysujWszystko() by zadziałała(narysowała mapę z tablicy). Próbowałem na wiele sposobów w nawiasie z roznymi opcjami. Moze trzeba stworzyć jakieś odwołanie do obiektu. Nie rozumiem tego mechanizmu.

Również, na pewno jest tu sporo "rzeczy" metod czy składni, których nie powinno sie w taki jak ja sposób (eksperymentanlo - ksiązkowo - na czuja googlowy ) formulować i jeśli coś mocno "razi po oczach" proszę również napisać jak to powinno wyglądać.

Dzieki z góry za pomoc!

Pozostało 580 znaków

2006-11-15 00:43
0

rysujCalosc(Graphics g) to jest to samo co rysujWszystko(), bo takie funkcji nie znalałzem w twoim kodzie. Przysłoń metodę z paint(Graphics g) dla obslugaObrazu, wstaw kod z rysujCalosc do tej metody i nastpenie xxx.repain() i powinno być ok.

Pozostało 580 znaków

2006-11-15 13:40
0

nie rozumiem co znaczy "Przysłoń metodę". Jak mozesz podaj zmodyfikowany kod.

Pozostało 580 znaków

2006-11-15 16:16
0
public class obslugaObrazu extends JFrame {

private Image tlo;
private Image sciana;
private boolean obrazkiWgrane;

//private GraphicsDevice device; // co tutaj sie dzieje ? - czy to odwołanie do obiektu klasy GraphicsDevice?

JFrame window = new JFrame();

DisplayMode displayMode = new DisplayMode(1024, 768, 16,DisplayMode.REFRESH_RATE_UNKNOWN);
//REFRESH daje to ze nie wywala wyjątku i sam dostraja

GraphicsEnvironment environment =
    GraphicsEnvironment.getLocalGraphicsEnvironment();

GraphicsDevice device = environment.getDefaultScreenDevice();

public void inicjujObraz(){

window.setUndecorated(true);
window.setResizable(false);

device.setFullScreenWindow(window);

// change the display mode
device.setDisplayMode(displayMode);

}

public void zamknijObraz() {

        Window window = device.getFullScreenWindow();
        if (window != null) {
            window.dispose();
        }
        device.setFullScreenWindow(null);// przelancza na tryb ktory byl wczesniej
    }

private Image loadImage(String fileName) {
        return new ImageIcon(fileName).getImage(); // tworzy obiekty z pobranych obrazów
    }

public void wczytajObrazki() {

       tlo = loadImage("space.jpg"); //obiekt tlo

    sciana = loadImage("brick.png");//obiekt sciana

        Image robbo1 = loadImage("robbo1.png");
        Image robbo2 = loadImage("robbo2.png");
        Image robbo3 = loadImage("robbo3.png");

        obrazkiWgrane = true;

        repaint();
    }

   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      //Graphics2D g2 = (Graphics2D)g; // bedziesz miał wiecej możliwości

            g.drawImage(tlo, 0, 0,null);

          Tablica zmiennaTablicy = new Tablica(); //czy tutaj trzeba tworzyć obiekt ?? lub jak zrobić odwolanie 

          zmiennaTablicy.stworzTablice();

          for (int y=0 ; y<24 ; y++){
          for (int x=0 ; x<32; x++){

                if(zmiennaTablicy.pobierzElementTablicy(x,y)=='a')

                g.drawImage(sciana, x*32,y*32,null);

          }
    }

}

class Main
{

  public static void main(String args[])
  {

Tablica tablica = new Tablica();

tablica.stworzTablice();
System.out.println(tablica.pobierzElementTablicy(0,0));//tutaj sprawdzam czy czyta dobrze

tablica.updateTablice(0,0,'d');

System.out.println(tablica.pobierzElementTablicy(0,0));//czy zrobilo update

obslugaObrazu xxx = new obslugaObrazu();

xxx.inicjujObraz();
  xxx.wczytajObrazki();

  xxx.repaint(); // !!! zamiast twojej metody
 //xxx.zamknijObraz(); 
  }

}

I powinno być ok.
Zawsze możesz rysować na panelu. Robisz swoją włąsną class obslugaObrazu extends JPanel i umieszczasz ten panel na formie.

Pozostało 580 znaków

2006-11-15 17:25
0

niestety wywala nastpujący błąd.

C:\Program Files\Java\jdk1.5.0_08\bin\.\obslugaObrazu.java:69: cannot find symbo
l
symbol  : method paintComponent(java.awt.Graphics)
location: class javax.swing.JFrame
      super.paintComponent(g);
           ^
1 error

Pozostało 580 znaków

2006-11-15 18:24
0

Acha bo twoj obraz to z JFrame sie wywodzi i dlatego są problemy. Najlepiej rysuje na panelu ktory nastepnie dodasz do swojego Frame, ktory odpowiada za fullscreen.

Pozostało 580 znaków

2006-11-15 18:50
0

hym, możesz podać przykład na możliwie prostym kodzie który wczytuje obrazki a inna klasa czyta z niego, bo czytanie dokumentacji na moim poziomie to jedynie przeglądanie pakietów i metod które i tak nie wiem jak użyć (jeszcze).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0