Jak wydobyć ścieżkę do obrazka? / skalowanie obrazka

0

Cześć, jestem w trakcie prac nad moja aplikacja do projektowania ogrodów.
Mam 2 panele z podłączona metodą drag&drop, wygląda to tak:
user image
Image and video hosting by TinyPic

Na lewym panelu wstawianie JLabela wygląda tak:

 ImageIcon ico =new ImageIcon("C:\\Documents and Settings\\student\\workspace\\DragTest3\\src\\drzewo.png");;
    p1.add(new JLabel(new ImageIcon(((new ImageIcon(ico.getDescription())).getImage()).getScaledInstance(30, 30, java.awt.Image.SCALE_SMOOTH)))); 

Przy upuszczaniu na prawy panel wygląda to tak:

ImageIcon ico = (ImageIcon)src.draggingLabel.getIcon();
label=new JLabel(new ImageIcon(((new ImageIcon(ico.getImage()).getImage()).getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH))));  
      No i wszytsko byłoby pięknie gdyby obrazki po prawej stronie nie były 'zpixelowane'.

**Czy da się jakoś odzyskać ścieżkę do tej ImageIcony?
Lub macie jakieś sugestie jak to rozwiązać? **

0

ło boziu już bardziej nakombinować nie mogłeś????

wrzucać takiego potwora


ImageIcon ico = (ImageIcon)src.draggingLabel.getIcon();
label=new JLabel(new ImageIcon(((new ImageIcon(ico.getImage()).getImage()).getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH))));  

zamiast


 ImageIcon ico =new ImageIcon(img.getScaledInstance(60, 60, java.awt.Image.SCALE_SMOOTH)) ;
JLabel  label=new JLabel(ico); 

poza tym jeżeli tworzysz obiekt ImageIcon z jakiegoś obrazka wczytanego to nie łatwiej stworzyć jeden obiekt typu Image( albo klasę) która będzie przechowywała zdjęcie a tworzyć ikonę odpowiedniego rozmiaru na bieżąco w danym miejscu?

pikseloza bierze się stąd że duże zdjęcie przerabiasz na male(30 na 30) po czym znów na duże (60 na 60) także mi się wydaje że lepiej w jakiejś oddzielnej klasie przechować obiekty typu image np:

import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 *
 * @author w.maciejewski
 */
public class JImageHolder {
    
    private Image drzewo;
//doloz inne elementy
    
    void wczytaj_drzewo(String sciezka) throws IOException{//wczytanie zdjecia
       this.drzewo=ImageIO.read(new File(sciezka));
    }
    
    ImageIcon daj_ikonke_drzewo(int x,int y){//zwrot obrazka
        
        
        return new ImageIcon(this.drzewo.getScaledInstance(x,y, java.awt.Image.SCALE_SMOOTH));
        
    }
    
}


btw od ostatnich pytań na forum projekt się bardzo ladnie rozrósł :) bardzo ładnie :D

0
public class JElement extends JLabel {
    private String typ;
    
    
    public void ustaw_typ(String s){
        this.typ=s;
    }
    
    
    public String pobierz_typ(){
        if(this.typ!=null){
            return this.typ;
        }else return "error";
        
    }
}

konstruktor i inne badziewie musisz napisać sobie sam.

Przy okazji jeżeli zrobisz coś takiego proponuję możliwość typu ustawienia tylko z jakiejś tablicy stringów gdzie będziesz miał kilka możliwości wyboru.

pozdrawiam
i pokaż efekty :)

0

nie wiem jak za bardzo ma wyglądać ten konstrurtor: napisałem coś takiego

public JElement(ImageIcon imageIcon) {
        this.setIcon(imageIcon);
    }

elementy JLabel zmienilem na JElement - wszystko działa jak wczesniej poprawnie, ale nie pobiera mi jednak tego typu nadal
dodawanie elementu:

 JElement test = new JElement(new ImageIcon(resizedImage));
    test.ustaw_typ("a");
    p1.add(test);

i po upuczeniu dodalem sobie taka linijke zeby sprawdzic czy dziala:

 System.out.println(l.pobierz_typ());

no i niestety wypisuje error czyli null

0

aha upuszczony element.

No ja Ci nie pomogę jak kodu nie zobaczę. :P

0

spędziłem całą nockę nad tym i doszedłem jak to zrobić !!! :D
Oto co trzeba było zrobić:

class DragPanel extends JPanel {
    
 private BufferedImage img;
 public JLabel draggingLabel;
 
 public DragPanel() {}
 
  public String names()
      {
      return draggingLabel.getName();
    }
}

Przy dodawaniu robie sobie takie coś

    resizedImage=resize(image,35,35);
    JLabel myLabel = new JLabel(new ImageIcon(resizedImage));
    myLabel.setName("icons\\drzewo.png");
    p1.add(myLabel);

A przy upuszczaniu

 l=new JLabel(new ImageIcon(src.names()));

No i w ten sposób odzyskuje oryginalny obraz :)
Co prawda zepsuło mi to działające obracanie elementów, ale zaraz popatrzę dlaczego

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