How to update a JScrollPane?
Hello!I try to write a small Image viewer in Java where I should be able to view images and do some small adjustments.
When my app starts there should be no image loaded at all. But when I load it and the image is bigger then the JscrollPane I would like to have the scrolls. But in some how they will not be updated.
I use a ImagePanel of my own beacuse I need to do som adjustments. Se code below.
I create my JScrollPane like:
ImagePanel imagePanel = new ImagePanel();
JScrollPane jscrollPane = new JScrollPane(imagePanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
I load a new Image like:
public void open()
{
try
{
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
fileChooser.setMultiSelectionEnabled(false);
if(JFileChooser.APPROVE_OPTION == fileChooser.showOpenDialog(this))
{
if(fileChooser.getSelectedFile() != null)
{
Image jpg = getToolkit().getImage(fileChooser.getSelectedFile().getPath());
MediaTracker mediaTracker = new MediaTracker(this);
try
{
mediaTracker.addImage(jpg, 0);
mediaTracker.waitForID(0);
}
catch(InterruptedException ie)
{
}
imagePanel = new ImagePanel(jpg);
jscrollPane.setViewportView(imagePanel);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
...But the scrollbars refuse to be updated.
So if any one know how to solve this. BTW I do have to use the ImagePanel!
Best regards
Fredrik
My code for the ImagePanel looks like:
import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.image.*;
public class ImagePanel extends JPanel
{
private Image jpg;
private Image resultImage;
private BleachFilter bleachFilter = new BleachFilter(1.5);
private DarkFilter darkFilter = new DarkFilter(1.5);
private NegativeFilter negativeFilter = new NegativeFilter();
private int[] pixels = new int[300 * 300];
public ImagePanel()
{
super();
resultImage = null;
jpg = null;
setBackground(new Color(255, 255, 255));
}
public ImagePanel(Image j)
{
super();
resultImage = j;
jpg = j;
setBackground(new Color(0, 0, 0));
setSize(j.getWidth(this), j.getHeight(this));
System.out.println(j.getWidth(this) + " " + j.getHeight(this));
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D graphics2D = (Graphics2D)g;
if(resultImage != null)
{
graphics2D.drawImage(resultImage, 0, 0, this);
}
}
public void setFilter(int i)
{
if(i == 0)
{
resultImage = jpg;
}
if(i == 1)
{
ImageProducer imageProducer = new FilteredImageSource( jpg.getSource(), bleachFilter);
resultImage = createImage(imageProducer);
}
else if(i == 2)
{
ImageProducer imageProducer = new FilteredImageSource( jpg.getSource(), darkFilter);
resultImage = createImage(imageProducer);
}
else if(i == 3)
{
ImageProducer imageProducer = jpg.getSource();
NegativeFilter negativeFilter = new NegativeFilter();
FilteredImageSource filteredImageSource = new FilteredImageSource(imageProducer, negativeFilter);
resultImage = createImage(filteredImageSource);
}
repaint();
}
}
