En ole tietoinen onko tätä kyselty muun kuin JFramen osalta, mutta toivoisin saavani vastauksen seuraavaan ongelmaan.
Mitenhän onnistuisi java-appletissa kuvan lataaminen uuteen ikkunaan (frameen)? Eli ohjelmani toimii niin, että kun kuvaa klikataan sen pitäisi aueta uuteen frameen ja näkyä täysikokoisena. Olen kolunnut useampiakin aihetta käsitteleviä sivustoja, mutta en ole onnistunut saamaan vastausta.
Toivoisin esimerkkikoodia. Kiitokset!
En ole tälläistä koskaan tehnyt ja aluksi ajattelin, että tuon ei pitäisi onnistua. Näyttää kuitenkin siltä appletista voidaan suorittaa javascript-koodia, jolla tuo pitäisi onnistua. Esimerkkikoodia ei nyt ole antaa, mutta tuolla oli jotain puhetta vastaavasta.
http://www.raditha.com/java/javascript.php
Voi tuohon olla jotain yksinkertaisempiakin ratkaisuja, mutta itse en ole kovin kokenut applettien kirjoittaja.
Silmäilin sivun läpi, mutta en oikein tykästynyt ajatukselle käyttää JavaScriptiä appletissani, mutta kiitokset kuitenkin avusta ^^
Luultavasti tuo onnistuu, sillä googlettamalla löytyi tämä ( http://www.tanssiorkesteri.org/kuvat.html ) sivu. Tuon esimerkin mukainen selain olisi tarkoituksena räpeltää. Kaikki muu toimii paitsi kuvan lataaminen frameen.
Tuo sinun linkki ei ole java-appletti vaan flash-sovellus, jolla on huomattavasti helpompi tehdä tuollaisia.
Aivan. Niinpä onkin, mutta ainakin idea tuli selväksi.
Eikö tämä todellakaan ole mahdollista? Vaikuttaako asiaan jos käyttäisinkin JFramea, onnistuuko API:lla(tuskin)? Ihmettelisin, jos tosiaan kielen rajoitteet tulevat tässä vastaan. Frameenhan on kuitenkin mahdollista piirtää muotoja, viivoja jne. Miksei siis kuvaa?
Tämän ongelman kanssa on tullut painiskeltua jo sen verran kauan, että toivoisin siihen vastauksen saavani.
PS. ToolBox on tullut usein esiin eri sivustoilla, mikähän kumma se on?
Mobel kirjoitti:
Frameenhan on kuitenkin mahdollista piirtää muotoja, viivoja jne. Miksei siis kuvaa?
Tokihan (J)Frameen voi kuvan piirtää. Ylikuormittaa vaan paint-metodin ja käyttää drawImagea. Tässä nimenomaisessa tapauksessa on kuitenkin varmaan näppärämpää käyttää jotain komponenttia, joka osaa näyttää kuvan. Laittamalla sen JScrollPaneen ja tämän siihen JFrameen saa skrollauksen ilmaiseksi.
Kiinnostuin tästä sen verran, että rakensin tuollaisen: http://blaze.dyndns.ws/~blaze/applettimagetesti/
Edit: laitetaas nyt se koodiki tähän, niin tulee arkistoitua:
// ImageApplet.java import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ImageApplet extends Applet { JButton b1, b2, b3; public void init() { // purkka++ // pari nappia, joista saa näkymään kuvan b1 = new JButton("1"); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showImg("1"); } }); b2 = new JButton("2"); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showImg("2"); } }); b3 = new JButton("3"); b3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showImg("3"); } }); this.add(b1); this.add(b2); this.add(b3); } public void showImg(String name) { // ladataan siitä hakemistosta, jossa tämä class-tiedosto // sijaitsee parametrin mukainen tiedosto ja annetaan se // parametriksi ShowImage-konstruktorille new ShowImage(this.getImage(this.getCodeBase(), name + ".jpg")); } }
// ShowImage.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ShowImage extends JFrame { private JLabel image; private JScrollPane scroll; public ShowImage(Image image) { // käytetään jlabelia näyttämään se kuva this.image = new JLabel(new ImageIcon(image)); // ja pukitaan se vielä scrollpanen sisään this.scroll = new JScrollPane(this.image); this.add(scroll); this.pack(); this.setVisible(true); } }
Kappas, en ole tullut ajatelleeksi, että appletista voisi avata uusia ikkunoita, mutta en tosiaan ole montaa applettia tehnytkään.
Hmm, jostain syystä tuo appletti veti firefoxini aikas jumiin appletin sulkemisenkin jälkeen. Jäiköhän se jotenkin päälle vai bugaakohan ff ihan itse.
Jepa!
Lähtihän se toimiin! Kiitos vaan Blazelle ja FooBatille, jotka jaksoivat tuskailla ongelman kanssa ja tietty jaella vinkkejä! Tosiaan mahtavaa saada tuo toimimaan viikkojen väännön jälkeen!
to Blaze:
Erittäin hyvä vinkki kivoilla kuvilla ^^
Ja ai niin. Onko Framella jotain rajoituksia verrattuna JFrameen, kun ei Framella kerran onnistu(vai onnistuuko)?
PS. Laitan oman version jossain vaiheessa nettiin kunhan saan tilaa jostain...
PSS. Tässä vielä oma lähestymistapani asiaan:
//jostain täältä kutsutaan metodia ruutu(); public void ruutu(){ //framen olen kirjoittanut yhteen "pääkoodin" kanssa String title = nimi; //nimi Frame ruutu = new Frame(title); ruutu.setIconImage(img); //kuva perittiin pääohjelmalta int leveys = 300; //koko. testivaiheessa vielä pieni int korkeus = 300; ruutu.setResizable(false); //ei voi muuttaa kokoa ruutu.setSize(leveys, korkeus); //muutetaan koko oikeaksi ruutu.setVisible(true); //halutaan varmaan myös nähdä frame //tähän pitäisi keksiä miten kuvan saa näkymään /*esim. Blazen tyyli (ei tosin tässä tapauksessa toimi) public ShowImage(Image image) { // käytetään jlabelia näyttämään se kuva this.image = new JLabel(new ImageIcon(image)); // ja pukitaan se vielä scrollpanen sisään this.scroll = new JScrollPane(this.image); this.add(scroll); this.pack(); this.setVisible(true); } */ ruutu.addWindowListener(new WindowAdapter() { //lisätään kuuntelija sulkemisnapille public void windowClosing(WindowEvent evt) { //jos sitä satutaan painamaan... Frame ruutuikkuna = (Frame)evt.getSource(); ruutuikkuna.dispose(); //...se menee kiinni } }); }
FooBat kirjoitti:
Hmm, jostain syystä tuo appletti veti firefoxini aikas jumiin appletin sulkemisenkin jälkeen. Jäiköhän se jotenkin päälle vai bugaakohan ff ihan itse.
java_vm-prosessi jäi kyllä päälle vielä tuon tabin sulkemisen jälkeenkin. Jumiin en kyllä Firefoxia saanu.
Mobel kirjoitti:
Ja ai niin. Onko Framella jotain rajoituksia verrattuna JFrameen, kun ei Framella kerran onnistu(vai onnistuuko)?
Voit vaihtaa tuon JFramen Frameksi ja homma pelaa edelleen.
<edit> Spoke too early. Homma toimii edelleen, paitsi että sitä ikkunaa ei saa suljettua kun Framella ei ole oletustapahtumakäsittelijää tuolle ruksille :P
Sellaisen lisäämisen jälkeen tuo toimisi samalla tavalla.</edit>
Oon vaan leikkiny enemmän Swingin kanssa, ja JScrollPanelle ei (tietääkseni) ole AWT-vastinetta, niin Swingiä joutuu kuitenkin käyttämään.
Vaivaampa vielä vähän ;)
En saanut tätä pätkää toimimaan omassa koodissani. Luultavasti sitä tarvitaan tässä joten laitan kohta sorsaan linkin (ellei joku keksi vikaa muuten vaan). Olen tehnyt uuden tiedoston ja se on samassa kansiossa jne. kääntäjä vaan herjaa, että se ei ymmärrä "ShowImage"-kohtaa.
new ShowImage(this.getImage(this.getCodeBase(), name + ".jpg"));
Eh... mitä tämä edes tekee? Avaa uuden tiedoston, mutta löytyykö infoa tästä aiheesta(tiedoston avaamisesta)?
Se luo uuden ShowImage-tyyppisen olion, ja antaa sen rakentajalle parametriksi Image-tyyppisen olion, joka ladataan tiedostosta Appletin getImage()-metodilla.
Tuo ShowImage on siis mun ite JFramesta laajentamani luokka, jonka koodi on tuossa yllä näkyvissä.
Kiitos suuresti edellisistä (useista) vastauksistasi!
Luultavastikkin erittäin tyhmä kysymys: Miten tuo antamasi lähdekoodi saadaan tomimaan? ^^
Eli tein näin:
Kopioin ensimmäisen tiedoston JBuilderiin. Tallensin sen ImageApplet nimellä. Tein uuden tiedoston samaan projektiin ja kopioin ShowImage-lähdekoodin siihen (tallensin tietty samalla nimellä). Kääntäjä ei edelleenkään usko riviä
new ShowImage(this.getImage(this.getCodeBase(), name + ".jpg"));
vaan herjaa: "ImageApplet.java": cannot find symbol; symbol : ShowImage, location: class ImageApplet at line 40, column 13
Kiitokset kärsivällisyydestäsi
Mobel kirjoitti:
Kopioin ensimmäisen tiedoston JBuilderiin. Tallensin sen ImageApplet nimellä. Tein uuden tiedoston samaan projektiin ja kopioin ShowImage-lähdekoodin siihen (tallensin tietty samalla nimellä).
En oo JBuilderia koskaan käyttäny, mut noin ton luulis toimivan :/
Minä käänsin nuo niin, että molemmat tiedostot samaan hakemistoon ja komensin 'javac ImageApplet.java'. Kääntäjä oli tarpeeksi fiksu huomatakseen, että sen ShowImagen koodi on siellä samassa hakemistossa ja sekin pitää kääntää.
Taas on javaa jauhettu useampi viikko, enkä ole omalla kääntäjällä saanut ohjelmaa toimimaan. Ongelma on siinä, että kääntäjä ei ymmärrä viittaustani edellä mainitsemallani koodilla toiseen tiedostoon.
Ihmettelenkin siis:
Miten saan avattua uuteen frameen kuvat yhdessä tiedostossa? Tietysti tämä onnistuisi kääntäjän kanssa temppuilulla, mutta sitä EI ENÄÄ JAKSA!
Jos tämä on mahdollista, niin apua tarvitaan.
hmm ihan kysymyksenä että miksi et käytä JDialog:ia JFramen sijaan?
Ihan vaan vastauksena, että en taida tätä hallita ;)
Pitääpä etsiä infoa tuosta aiheesta, ellei sinulla ole tarjota esimerkkikoodia tuosta keinosta. Kiitokset vinkistä!
Etkö voi vain tehdä useammasta kooditiedostota jar-pakettia, jonka voi sitten pistää siihen applet-tagin 'archive' kohtaan ja 'code' pistää sen aloitusluokan nimen.
Jar-paketin voi luoda esim. näin:
jar -cvf paketti.jar *.class
Aihe on jo aika vanha, joten et voi enää vastata siihen.