在applet上显示图像

时间:2013-01-28 05:30:56

标签: java image swing applet jtree

我正在使用Jtree列出目录的各种图像,当用户点击树中显示的图像名称时,我想在applet上显示图像,我正在使用的代码是如下所示,ta是applet的一个对象,因为我在另一个类中使用它。

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;

}

但它不起作用。

2 个答案:

答案 0 :(得分:2)

当您显示本地文件系统中的文件时,不需要使用URL。使用

displayImage(currentFile);

并重写该方法如下:

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

其中(I假设)组件的绘制方法必须与

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

由于安全原因,如果没有安全管理员(通常在同一台计算机上)签名或运行,applet将只能访问文件系统。

答案 1 :(得分:2)

  

但它不起作用。

这没有任何帮助,你有例外吗?怎么了?请尽早发布SSCCE以获得更好的帮助

  

我想在用户点击图片时在applet上显示图片   树中显示的名称,我使用的代码如下,ta是   小程序的对象,因为我在另一个类中使用它。

使用JPanel对象和Component#getGraphics IMO,你错了。

  • 不要使用Component#getGraphics()作为非常好的做法而不是持久,因此在下次调用repaint()时屏幕将被清除。

  • 不要使用带有Swing组件的Applet,而是使用JApplet

JPanel变量的 getter和setter 添加到容器中,然后覆盖BufferedImage并在那里绘制paintComponnet

现在更改BufferedImage只需拨打 setter BufferedImage,然后致电setBackgroundImage(BufferedImage img)上的repaint()以显示更改。像这样:

JPanel

现在我们这样使用它:

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;
    }
}