/ / Bild auf Applet anzeigen - Java, Image, Swing, Applet, Jtree

Bild auf Applet anzeigen - Java, Image, Swing, Applet, Jtree

ich benutze Jtree Um verschiedene Bilder eines Verzeichnisses aufzulisten, möchte ich ein Bild anzeigen applet Wenn der Benutzer auf den im Baum angezeigten Bildnamen klickt, lautet der verwendete Code wie folgt: ta ist ein Objekt des Applets, weil ich es in einer anderen Klasse verwende.

private void displayImage(URL furl, String fname) {


ta.Picture = ta.getImage(furl, fname);
prepareImage(ta.Picture, this);
Graphics g = ta.imageCanvas.getGraphics();
g.clearRect(10, 10, 800, 800);
g.drawImage(ta.Picture, 10, 10, this);

} // displayImage

public void valueChanged(TreeSelectionEvent e)
{
// TODO Auto-generated method stub
FileTreeNode node = (FileTreeNode) tree.getLastSelectedPathComponent();
System.out.println("slecte asldf " + node.isLeaf());
if (node.isLeaf())
{

currentFile = node.file;
System.out.println("File name " + currentFile.getName());
try
{
URL furl = new URL("file:/F:/photos");
displayImage(furl, currentFile.getName());
}
catch (MalformedURLException mle)
{
System.out.println("Exception::::::" + mle);
}

}
else
currentFile = null;

}

Aber es funktioniert nicht.

Antworten:

2 für die Antwort № 1

Da Sie Dateien aus dem lokalen Dateisystem anzeigen, ist das Arbeiten mit URLs nicht erforderlich. Verwenden

displayImage(currentFile);

und schreiben Sie diese Methode wie folgt um:

private void displayImage(File file) {
BufferedImage image = ImageIO.read(file);
ta.image = image;
ta.repaint();
}

Wobei die Lackiermethode der (ich an nehmenden) Komponente ta gleich sein muss

BufferedImage image;
public void paint(Graphics g) {
g.clearRect(10, 10, 800, 800);
g.drawImage(ta.Picture, 10, 10, this);
}

Aus Sicherheitsgründen kann das Applet nur dann auf das Dateisystem zugreifen, wenn es signiert ist oder ohne Sicherheitsmanager ausgeführt wird (meistens auf demselben Computer).


2 für die Antwort № 2

Aber es funktioniert nicht.

Dies ist in keiner Weise hilfreich, haben Sie Ausnahmen? Was geschieht? Bitte posten Sie eine SSCCE für eine bessere Hilfe früher

Ich möchte ein Bild im Applet anzeigen, wenn der Benutzer auf das Bild klickt Der in der Baumstruktur angezeigte Name lautet wie folgt: ta ist ein Objekt des Applets, weil ich es in einer anderen Klasse verwende.

IMO du machst es falsch mit dem JPanel Objekt und Component#getGraphics.

  • Nicht verwenden Component#getGraphics() da es keine gute übung ist und somit beim nächsten aufruf nicht ausharrt repaint() Der Bildschirm wird gelöscht.

  • Verwenden Sie Applet nicht mit Swing-Komponenten, sondern verwenden Sie JApplet.

Fügen Sie eine benutzerdefinierte hinzu JPanel mit Getter und Setter zum BufferedImage variabel auf den Container und als überschreiben paintComponnet und zeichne die BufferedImage Dort.

Nun soll sich das ändern BufferedImage einfach die anrufen Setter d setBackgroundImage(BufferedImage img) und dann anrufen repaint() auf JPanel um die Änderungen anzuzeigen. Wie so:

public class MyPanel extends JPanel {
private BufferedImage bg;

public MyPanel(BufferedImage bi) {
bg=bi;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2d=(Graphics2D)g;
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));

g2d.drawImage(bg,0,0,this);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(bg.getWidth(),bg.getHeight());
}

public BufferedImage setBackgroundImage(BufferedImage bi) {
bg=bi;
}
}

Jetzt benutzen wir es so:

MyPanel mp=new MyPanel(...);//create the panel with an image
...
add(mp);//add to container
...
mp.setBackgroundImage(..);//change the image being displayed

mp.repaint();//so the new image may be painted