- 2813 megtekintés
Hozzászólások
nincs valami Invalidate() és/vagy Update() metódus, ami kikényszeríti az újrarajzolást ?
- A hozzászóláshoz be kell jelentkezni
A form setVisible hivasa elott adod hozza a kepeket a panelhez?
Illetve kep hozzaadas utan kell repaint-ot hivni.
- A hozzászóláshoz be kell jelentkezni
épp ez a problémám, hogy a form már megvan, és utólag tölt be egy képet az egyik oldalra, a másik oldalra pedig az aktuális könyvtárban lévő képekből csinál preview nézetet. A könyvtárat akármikor meg tudod változtatni, és változtatás után nem jeleníti meg a képeket csak akkor ha előtte lekicsinyítem az ablakot, majd visszateszem maximalizálttá.
- A hozzászóláshoz be kell jelentkezni
Esetleg a JFrame-t megvalósító osztályban egy show() metódus hívása a JPanel hozzáadása után? Más ötletem nincs. :( Egyelőre
- A hozzászóláshoz be kell jelentkezni
UI.: Jut eszembe a show deprecated, ugyhogy setVisible(), tényleg :)
- A hozzászóláshoz be kell jelentkezni
Sajnos nem segített :( viszont észrevettem egy másik hasonló furcsaságot. Amíg nem méreteztem át a képeket rendesen meg jelent, de amint egy tök más JPanelen lévő JTextArea mezőre tettem egy scrollbart, ugyanezt produkálta.
- A hozzászóláshoz be kell jelentkezni
Nem próbáltam most hirtelen ki, de szerintem ez kell neked:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#invalid…()
vagy:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#repaint()
Azt hiszem a különbség az, hogy az invalidate újraelrendezést (layout) és csinál, a repaint meg csak festést. Szélsőséges esetben hívd meg a kettőt egymás után. Valahogy működnie kell.
- A hozzászóláshoz be kell jelentkezni
Ha a könyvtár váltásnál kellene képet cserélni a panelen, akkor talán a könyvtár váltás figyelőjébe kellene a váltás után egy metódus, ami a panelen kivált egy validate()-et, vagy egy pack()-ot. Remélem érted mire gondoltam :)
- A hozzászóláshoz be kell jelentkezni
Több "hiba" is van a kódban, ami abból adódik, hogy valami ősöreg példából dolgozol, illetve nem felelnek meg a Java elvárásoknak...
// Célszerű a feladatra metódust írni
public BufferedImage loadImage(File file, int w, int h)
{
if (file!=null)
{
// Felejtsd el a MediaTracker-t, már akkor elavult volt, amikor megírták
BufferedImage image=ImageIO.read(file);
// Az átméretezés megfelelő, nem idézem be ide
[...]
return image;
}
return null;
}
Ezen túl a helyedben nem a JPanel-be erőszakolnám be a képek megjelenítését - tudom, szinte minden leírást ezt erőlteti - hanem egy JLabel-t használnék erre, mivel ez képes képet megjeleníteni, igaz, ImageIcon-t kell neki átadni, valahogy így:
JLabel label=new JLabel(new ImageIcon(loadImage("valami.png",100,50)));
A label-t pedig oda adod hozzá és akkora méretben, amekkorában akarod... :)
Részedről ott van baj, hogy a Swing nem igazán tud róla, hogy kirajzoltál valami képet, mert erről értesíteni kell, célszerűen meg kell hívni a repaint() metódust.
--
http://www.javaforum.hu
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen, tökéletesen működik, egy esetet kivéve:
a képet befoglaló JPanel alatt van egy másik JPanel, amiben egy textarea van, amolyan history kiírására. Namármost, ha a textareára teszek egy scrollbart:
statusbar.add(new JScrollPane(status = new JTextArea("system loaded...", 3, 50))); nem jelennek meg a képek, így viszont igen:
statusbar.add(status = new JTextArea("system loaded...", 3, 50));
Ezt nem értem, hisz a két elem (a kép és a textarea) nem is azonos JPanelen vannak. Ennek okát el tudod nekem mondani?
Köszi
- A hozzászóláshoz be kell jelentkezni