wydobycie nazwy pliku graficznego

0

Na początku witam wszystkich może zaczne od tego że nie znam się zbytnio na programowaniu w Javie. Pewnie zaśmiecam forum ponieważ pewnie podobny temat już był ale proszę o pomoc.

Mam dwa problemy.

1. to wydobycie nazwy wczytanego pliku graficznego. Nie znam się zbytnio na klasach, funkcjach itd.
Oto kod wczytujący obrazek:

public void openFile()
   {  
      JFileChooser chooser = new JFileChooser();
      chooser.setCurrentDirectory(new File("."));
      
      chooser.setFileFilter(new
         javax.swing.filechooser.FileFilter()
         {  
            public boolean accept(File f)
            {  
               String name = f.getName().toLowerCase();
               return name.endsWith(".jpg") || name.endsWith(".jpeg")
                  || f.isDirectory();
                   }
                       public String getDescription() {  return "Image files"; }
                   });
      int r = chooser.showOpenDialog(this);
      if(r != JFileChooser.APPROVE_OPTION) return;

      try
      {
            //int f = chooser.getSelectedFile();
            image = ImageIO.read(chooser.getSelectedFile());
      }
      catch (IOException e)
      {
         JOptionPane.showMessageDialog(this, e);
      }
      repaint();
   }

Próbuję wydobyć nazwę wybranego oraz wczytanego wcześniej pliku.

image.getName();
Wywala bład, nie wiem czy może nie zrobiłem źle skryptu wczytującego zdjęcie.

2. Kolejnym problemem jest zachowanie danych w zmiennie po użyciu jej w innej klasie. Przykładowo tworzę klasę

public void abc()
w klasie mam obliczenia matematyczne na zmiennej "float"
jeżeli w danej klasie wywołuje zawartość zmiennej poprzez

System.out.println(zmienna);
w wierszu poleceń pojawia się wynik, czyli zawartość zmiennej. Jeżeli odwołuje się do tej zmiennej w innej klasie np.

public void abcd()
i prubuję odczytać zawartość w ten sam sposób, zmienna zwraca "0,0". Oczywiście nie zapomniałem o

private flloat zmienna;
gdzieś na końcu programu.

Za wszelką pomoc z góry dziękuję i pozdrawiam wszystkich

Algecik

0
  1. Zobacz przykład z javadoca: http://java.sun.com/javase/6/docs/api/javax/swing/JFileChooser.html
    JFileChooser chooser = new JFileChooser();
    FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "JPG & GIF Images", "jpg", "gif");
    chooser.setFileFilter(filter);
    int returnVal = chooser.showOpenDialog(parent);
    if(returnVal == JFileChooser.APPROVE_OPTION) {
       System.out.println("You chose to open this file: " +
         chooser.getSelectedFile().getName());  /* <<<<<<---------------------------- */
    }
  1. Napisz akcesor do zmiennej:
public float getZmienna(){
  return zmienna;
}
0

Dzięki bardzo za pomoc niestety jeżeli chodzi o mój 2 problem próbowałem tak jak napisałeś ale nie działa :-(. Nie wiem dlaczego dalej zmienna podaje wartość 0,0

0

Piszesz o klasie i dajesz jej przykład:

public void abc()

delikatnie mówiąc to jest głupota. Tym nie mniej spróbuję zgadnąć dlaczego nie działa. Zapewne masz w klasie pole o nazwie zmienna oraz w metodzie gdzie liczysz zadeklarowałeś zmienną lokalną

 
float zmienna;

Wyniki obliczeń są zapamiętywane w zmiennej lokalnej, klasa zewnętrzna odczytuje wartość pola.
pozdrawiam

0

To jest dla mnie czarna magia może ktoś to wytłumaczyć tak na chłopski rozum jak to się mówi. W klasie public void mam abc() mam zadeklaronawą zmienną

float zmienna;
następnie robie obliczenia i w wynik zapisuję do tej zmiennej.

Następnie probuję odczytać wynik tej zmiennej w klasie public void abcd() i pojawia się "0,0". Nie mam pojęcie czym jest pole i zmienna lokalna. Mogę dodać tylko tyle że na int zamiast float wszystko działa poprawnie oczywiście obliczenia na tej zmiennej są dla int czyli nie są przecinkowe.

pozdrawiam
Algecik

0

Zacznij od lektury książek.

public class Test
{
    private float x=0.0; // to jest pole (składowa klasy)
    private void oblicz()
    {
        float x=23.9*45.1; // to jest zmienna lokalna metody oblicz, zasłoniła pole o nazwie x 
        // tu powinno być (moim zdaniem) x=23.9*45.1; 
    }
    public float getX()
    {
        return x; // tu jest zwracana wartość pola x (czyli 0.0)
    }
}
0

Ok. rozumiem skrypt który napisałeś więc w jaki sposób mogę w innej klasie odczytać wartość zmiennej lokalnej jeżeli mam:

public void oblicz()
{
float a = 1,99 * 7;
}

piblic void wynik()
{
float b = a * 3,77; // w tym przypadku a = 0,0m chciałbym aby było równe wynikowi odliczonemu wcześniej.
}
public float a;

program jest idiotyczny ale pokazuje mój problem.

pozdrawiam

0

Chyba jednak nie zrozumiałeś. Nie masz możliwości odczytania w innej klasie zmiennej lokalnej, nawet w innej metodzie tej samej klasy nie odczytasz zmiennej lokalnej - po zakończeniu wykonywania metody zmienna lokalna przestaje istnieć. Program winien wyglądać tak:

public void oblicz()
{
    a = 1,99 * 7;
}

piblic void wynik()
{
    b = a * 3,77;
}
public float a;
public float b;

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