[JAVA]CardLayout --> andere afbeelding bij andere Card

Pagina: 1
Acties:
  • 37 views sinds 30-01-2008

  • degroot
  • Registratie: December 2003
  • Niet online
Beetje vage titel , maar ik snap neit goed hoe ik dit uit moet leggen

Ik ben bezig om met een cardlayout te werken....
Iedere kaart moet een ander plaatje bevatten.....
Tis eigenlijk heel kort(en vast ook simpel.....)

Hoe kan ik aan iedere kaart een plaatje meegeven?

Dit is mijn code wat ik tot nu toe heb
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class test extends Applet
{
    View view;
    Controller controller;
    
    public void init()
    {
        setLayout(new BorderLayout());
        
        view = new View();
        controller = new Controller(view);
        
        add(view,BorderLayout.NORTH);
        add(controller, BorderLayout.CENTER);
    }
}

class View extends Panel
{
    private CardLayout cardlayout;
    private Graphics g;
    
    public View()
    {
        cardlayout = new CardLayout();
        setLayout(cardlayout);
        
        Canvas kaart1 = new Canvas();
        
        Canvas kaart2 = new Canvas();
        
        Canvas kaart3 = new Canvas();
        
        Canvas kaart4 = new Canvas();
    
        
        add("kaart1",kaart1);
        add("kaart2",kaart2);
        add("kaart3",kaart3);
        add("kaart4",kaart4);
    } 

    public CardLayout getCardLayout()
    {
        return cardlayout;
    }
}

class Controller extends Applet
{
    private Button terugknop , vooruitknop;
    private View view;
    private Image plaatje;
    
    public Controller(View view)
    {
        this.view = view;
        
        knophandler KH = new knophandler();
        terugknop = new Button("<--");
        vooruitknop = new Button("-->");
        
        terugknop.addActionListener(KH);
        vooruitknop.addActionListener(KH);
        
        add(terugknop);
        add(vooruitknop);
    }
    
    class knophandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            CardLayout cardlayout = view.getCardLayout();
            if(e.getSource() == terugknop)
            {
                cardlayout.previous(view);  
            }
            if(e.getSource() == vooruitknop)
            {
                cardlayout.next(view);
            }
        }
    }
}


Ik kan wel gewoon in een applet een plaatje toevoegen....dat doe ik altijd dmv onderstaande code(veronderstel dat deze code terug hoort te komen in mijn bovenstaande applet(maar waar???))
code:
1
2
3
4
5
6
7
8
9
//var declareren
Image plaatje;
//plaatje vastzetten aan variabelen
plaatje = getImage(getDocumentBase(),"afbeelding/1.JPG");
//plaatje op scherm tekene
public void paint(Graphics g)
{
     g.drawImage(plaatje,20,20,this);
}

Deze code moet ook in de klasse controller komen te staan neem ik aan...
Moet ik dus bij de klasse View aan kaart iets toevoegenn??
Dus bijvoorbeeld kaart1.controller.setPlaatje(); of iets dergelijks?
Of zit ik een beetje verkeerd te denken
Ben hard bezig met java te snappen maar schiet niet echt op helaas haha

Hopelijk kunnen jullie mij weer een beetje opweg helpen!!!

www.degroot-it.nl


  • bodiam
  • Registratie: December 2001
  • Laatst online: 31-12-2024
Gokje:

Voeg het plaatje toe aan je canvas. Waarschijnlijk kan dat niet, en zul je een component op het canvas moeten plaatsen die daar wel mee overweg kan. In het geval van Swing zou je gebruik kunnen maken van een JLabel, welke zowel text als plaatjes kan tonen. In het geval van AWT weet ik het niet, maar een soortgelijke manier is vast mogelijk.

[ff gezocht]

Okee, bovenstaande is vast hardstikke fout, maar tijdens het zoeken naar een oplossing kwam ik wel dit tegen: http://www.iam.ubc.ca/gui...swing/ImageDisplayer.java

(bron: http://www.iam.ubc.ca/gui...inting/drawingImages.html)

Klinkt wel een beetje wat jij wilt. Alleen moet je geen JPanel's gebruiken, maar gewone panels, of Canvas objecten...

  • degroot
  • Registratie: December 2003
  • Niet online
Zoals je op deze link aangeeft :
http://www.iam.ubc.ca/gui...inting/drawingImages.html

Zo voer ik nu ook een plaatje in...
Dit lukt allemaal in een simpele applet alleen met de CardLayout snap ik het niet helemaal :$
Hoe kan ik deze toevoegen aan bijvoorbeeld kaart1 kaart2 en kaart3...en waar moet ik deze wegzetten?

En ik neem aan dat de code dit word....

code:
1
2
3
4
5
6
7
8
Public View(); //of moet de code in Controller komen?????
{
    plaatje = getImage(getDocumentBase(),"plaatje.jpg");
}
public void paint(Graphics g)
{
     g.drawImage(plaatje,20,20,this);
}


Maar hoe kan ik dat nu aan een kaart1 of aan kaart2 etc koppelen??
Alvast thnQ voor je links

www.degroot-it.nl


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-02 07:12

Nick_S

++?????++ Out of Cheese Error

Misschien zou je zoiets kunnen doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
public class ImageShower extends JComponent {

    private final Image image;

    public ImageShower(final String img) {
         image = getImage(getDocumentBase(), image);
    }

    public void paint(final Graphics graph) {
        graph.drawImage(image,20,20,this);
    }
}


En dan bij het aanmaken van je kaarten:
code:
1
2
Canvas kaart1 = new Canvas();
kaart1.add(new ImageShower("afbeelding/plaatje.jpg");


Disclaimer, bla bla, ongeteste, uit het hoofd geschreven code, kan (is zeker zeer waarschijnlijk) compileerfouten bevatten.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • degroot
  • Registratie: December 2003
  • Niet online
@Nick_S:

Dit is inderdaad een goede oplossing , en eigenlijk vrij logisch te bedenken maar ben pas een beginner(bezig met java uit een boek aan het leren...)
Ik heb je code iets of wat aangepast en in mijn code geimplementeerd....
Alleen krijg ik de boel nog niet echt werkend en loopt vast op de volgende error
code:
1
2
3
4
5
6
7
8
9
D:\JAVA\test.java:54: cannot resolve symbol
symbol  : class JComponent 
location: class Plaatje
class Plaatje extends JComponent
                      ^
D:\JAVA\test.java:61: cannot resolve symbol
symbol  : method getDocumentBase ()
location: class Plaatje
                image = getImage(getDocumentBase(),img);


Ik heb je code als volgt gebruikt....
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.awt.*;
import java.awt.event.*;
import java.applet.*;


public class test extends Applet
{
    View view;
    Controller controller;
    
    public void init()
    {
        setLayout(new BorderLayout());
        
        view = new View();
        controller = new Controller(view);  
        
        add(view,BorderLayout.NORTH);
        add(controller, BorderLayout.CENTER);
    }
}

class View extends Panel
{
    private CardLayout cardlayout;
    private Plaatje plaatje;
    
    public View()
    {
        cardlayout = new CardLayout();
        setLayout(cardlayout);
        
        Canvas kaart1 = new Canvas();
        kaart1.add(new Plaatje("afbeelding/1.jpg"));
        
        Canvas kaart2 = new Canvas();
        
        Canvas kaart3 = new Canvas();
        
        Canvas kaart4 = new Canvas();

        add("Kaart 1",kaart1);
        add("Kaart 2",kaart2);
        add("Kaart 3",kaart3);
        add("Kaart 4",kaart4);
    } 
    
    public CardLayout getCardLayout()
    {
        return cardlayout;
    }
}

class Plaatje extends JComponent
{
    private Image image;
    private Plaatje plaatje;
    
    public Plaatje(String img)
    {
        image = getImage(getDocumentBase(),img);
    }
    
    public void paint(Graphics g)
    {
        g.drawImage(image,20,20,400,300,this);
    }
}

class Controller extends Panel
{
    private Button terugknop , vooruitknop;
    private View view;
    
    public Controller(View view)
    {
        this.view = view;
        
        knophandler KH = new knophandler();
        terugknop = new Button("<--");
        vooruitknop = new Button("-->");
        
        terugknop.addActionListener(KH);
        vooruitknop.addActionListener(KH);
        
        add(terugknop);
        add(vooruitknop);
    }
    
    class knophandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            CardLayout cardlayout = view.getCardLayout();
            if(e.getSource() == terugknop)
            {
                cardlayout.previous(view);  
            }
            if(e.getSource() == vooruitknop)
            {
                cardlayout.next(view);
            }
        }
    }
}


Hopelijk kunnen jullie mijn denkfout beredeneren en mijn weer een beetje op weg helpen!!!

www.degroot-it.nl


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22-02 00:22

Janoz

Moderator Devschuur®

!litemod

Dat is geen denkfout, maar een simpele syntax fout.

Misschien een idee om eens een fatsoenlijke IDE te gebruiken zodat je de juiste packages automatisch importeert?

Daarnaast is het over het algemeen niet zo handig om swingcode (JComponent) en awt (Applet, Pannel enz enz) te mixen.

Je topic gaat dicht omdat het hier niet de bedoeling is om anderen je syntaxfouten op te laten lossen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.