Toon posts:

[Java] plaatje in JScrollPane

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een plaatje weergeven in een JScrollPane. Wanneer dat plaatje groter is dan het JScrollPane, dan wordt de 'rest' van het plaatje buiten het JScrollPane weergegeven, in plaats van dat je het kan scrollen.

Plaatjes worden weergegeven op een canvas:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package comicreader;

import java.awt.*;

public class PicCanvas extends Canvas
{
    protected Image image;

    public PicCanvas()
    {
      setSize(1,1);
    }

    public PicCanvas(Image image)
    {
      setImage(image);
    }

    public void setImage(Image image)
    {
      MediaTracker mt = new MediaTracker(this);
      mt.addImage(image, 0);
      try
      {
        mt.waitForID(0);
      }
      catch(Exception _ex) { }
      this.image = image;
    }

    public Image getImage()
    {
      return image;
    }

    public void paint(Graphics g)
    {
      try
      {
        this.setBackground(new Color(255,255,255));
        this.resize(image.getWidth(this),image.getHeight(this));
        g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this);
      }
      catch(Exception ex) { }
    }

    public void update(Graphics g)
    {
      paint(g);
    }
}

Uit het frame waar alles in komt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
...
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
...
comiccanvas = new PicCanvas();
comiccanvas.setBounds(1,1,1,1);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
scrollpane = new JScrollPane(comiccanvas);
scrollpane.setBorder(BorderFactory.createLineBorder(Color.black));
scrollpane.setBounds(10,130,this.getWidth()-30,this.getHeight()-160);
contentPane.add(scrollpane);
...

Code om een plaatje weer te geven:
code:
1
2
3
4
5
...
Image image = getToolkit().getImage(file.toString());
comiccanvas.setImage(image);
comiccanvas.repaint();
...

Ik heb vanalles lopen kloten, maar ik kom er niet uit.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Waarom stop je niet gewoon een ImageIcon in een JLabel en stop je dat label in een JScrollPane?

Al dat gepruts op die canvassen is heel leuk, maar vaak behoorlijk onnodig ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ik heb het opgelost met deze klasse:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import javax.swing.JLabel;
import java.awt.Toolkit;
import java.awt.Image;
import javax.swing.ImageIcon;
import java.net.URL;

public class PicLabel extends JLabel {

  public PicLabel()
  {
    super();
  }

  public void setpicture(String filename)
  {
    Image image = getToolkit().getImage(filename);
    ImageIcon pic_icon = new ImageIcon();
    pic_icon.setImage(image); // returns pas als plaatje is geladen
    this.setIcon(pic_icon);
  }

  public void setpicture(URL url)
  {
    Image image = getToolkit().getImage(url);
    ImageIcon pic_icon = new ImageIcon();
    pic_icon.setImage(image); // returns pas als plaatje is geladen
    this.setIcon(pic_icon);
  }
}

Bedankt voor de tip.