我正在使用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;
}
但它不起作用。
答案 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;
}
}