[JAVA] Applet image background

Pagina: 1
Acties:

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21-08 08:30
Ik heb een applet met een aantal JButtons nu gaat dat allemaal goed....
Maar ik krijg op geen mogelijk heid een achtergrond in het applet.

Als ik paint ga gebruiken dan laat ie niks meer zien,
Is er een manier om een achtergrond plaatje in een applet te plaatsen of desnoods in een JPanel welke over de hele achtergrond staat?

Ik heb al veel gezocht maar kan geen manier vinden....

PSN jschut_82 | Xbox: JSchut82


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
Heb je ook al iets met een Canvas geprobeerd? Ik vind dat nog altijd de meest ideale tekenondergrond

btw, bedoel je je een extern plaatje (.GIF/.BMP) of gewoon een g.drawRect(..) bijvoorbeeld

[ Voor 36% gewijzigd door vogeltje op 19-09-2003 12:41 ]

binnenkort een hele dikke casemod :P


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21-08 08:30
vogeltje schreef op 19 September 2003 @ 12:39:
Heb je ook al iets met een Canvas geprobeerd? Ik vind dat nog altijd de meest ideale tekenondergrond

btw, bedoel je je een extern plaatje (.GIF/.BMP) of gewoon een g.drawRect(..) bijvoorbeeld
Een extern plaatje..... een GIF

PSN jschut_82 | Xbox: JSchut82


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
Ik weet niet precies meer hoe het gaat met (J)Buttons en Image objecten. Maar ik heb vorig jaar wel gewoon voor een 2D bordspel, met een groot .JPEGje op de achtergrond, daarover vierkantjes kunnen tekenen. Dit zijn dus gewoon tekeningen, en geen (J)Button objecten. Maar probeer eens gewoon je plaatje/tekening in een apart Canvas te tekenen, en die aan je JPanel toe te voegen, waar je dus al je Buttons op hebt staan.

Post anders eens wat code

binnenkort een hele dikke casemod :P


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21-08 08:30
Kheb hier al wat van canvas instaan maar dit werkt niet!

Hier de code:
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
public class TextEditor extends JFrame 
{ 
    JPanel backgroundPanel;
    ImageCanvas canvas;

    JButton BoldButton;

    public void init() 
    {
        canvas = new ImageCanvas();
        backgroundPanel = new JPanel();
        backgroundPanel.setPreferredSize(new Dimension(450, 100));

        BoldButton = new JButton(new StyledEditorKit.BoldAction());
        BoldButton.setText("BOLD");
        BoldButton.setPreferredSize(new Dimension(22, 22));
        BoldButton.setToolTipText("Vetgedrukt");

        add(backgroundPanel);
        backgroundPanel.add(canvas);
        backgroundPanel.add(BoldButton);

    } 
  
    public void stop() 
    { 

    } 
   
}

class ImageCanvas extends Canvas
{
    private Image background;

    MediaTracker mt;

    public void init() 
    {
        mt = new MediaTracker(this);
        background = Toolkit.getDefaultToolkit().getImage("background.gif");
        mt.addImage(background,1);
  
        try { 
            mt.waitForAll(); 
        } 
        catch (InterruptedException  e) {}

    } 

    public void paint(Graphics g) 
    { 
        g.drawImage(background,0,0,this);
    }
};


Ik begrijp niet zo goed hoe je dat bedoeld met die canvas......
Misschien wil je dat een beetje toelichten

PSN jschut_82 | Xbox: JSchut82


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
Nou, et probleem wat ik toen had was als volgt: Ik had een tekenveld, waar ik een 2d bordspel op tekende (allemaal vakjes gewoon). In ditzelfde venster had ik ook zo'n menubar aan de bovenkant. Als ik hierbij dit tekenveld gewoon hard op het JPanel tekende, dan werkte et allemaal gewoon goed, alleen een enorm geflikker irritant dus. Als ik dit bordspel tekende op het Canvas -> perfect, geen geflikker helemaal top. Et probleem was alleen nu, dat als ik op een menu klikte, dan kwamen alle menuitems achter het tekenveld hangen. Dit komt denk door Heavy/Light weight components.
Dit heb ik toen opgelost door het Canvas apart als een component toe te voegen aan het JPanel.

Ik zit niet thuis, anders had ik daar nog wat source van kunnen posten, helaas

binnenkort een hele dikke casemod :P


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Let op wat je aan het doen bent! Je bent nu bezig met het mengen van AWT en Swing en behalve als je ECHT weet wat je aan het doen bent, moet je daar nooit aan beginnen.
In plaats van een AWT Canvas zou ik gewoon een JPanel gebruiken en dan een overriding in de paintComponent( ) gebruiken in plaats van in de paint :)

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21-08 08:30
Ik heb nu het volgende....

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
public class TextEditor extends Applet 
{ 
    ImagePanel backgroundPanel;

    JButton BoldButton;

    public void init() 
    {
        backgroundPanel = new ImagePanel();
        backgroundPanel.setPreferredSize(new Dimension(450, 100));

        BoldButton = new JButton(new StyledEditorKit.BoldAction());
        BoldButton.setText("BOLD");
        BoldButton.setPreferredSize(new Dimension(22, 22));
        BoldButton.setToolTipText("Vetgedrukt");

        add(backgroundPanel);
        backgroundPanel.add(BoldButton);

    } 
  
    public void stop() 
    { 
        // no actions needed here now. 
    } 
   
}

class ImagePanel extends JPanel
{
    private Image background;

    MediaTracker mt;

    public void init() 
    {
        mt = new MediaTracker(this);
        background = Toolkit.getDefaultToolkit().getImage("background.gif");
        mt.addImage(background,1);
  
        try { 
            mt.waitForAll(); 
        } 
        catch (InterruptedException  e) {}

    } 

    public void paintComponent(Graphics g) 
    { 
        g.drawImage(background,0,0,this);
    }
};


Ik zie nu een grijs scherm... Maar als ik op de plek klik waar de Button zou moeten staan dan komtie wel tevoorschijn! :?

[ Voor 170% gewijzigd door JSchut op 19-09-2003 13:28 ]

PSN jschut_82 | Xbox: JSchut82


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
JSchut schreef op 19 September 2003 @ 13:11:
Zou je dit kunnen uitleggen..... ik ben nog niet zo lang bezig met java en weet niet hoe je dat kan doen
http://java.sun.com/docs/books/tutorial/uiswing/index.html voor de Swing turorial waar het instaat (een aanrader imho)

specefieker:
For Swing components, custom painting code goes in the paintComponent method.
Verder moet je ook even kijken of het plaatje wel geladen kan worden. Ik heb een vermoeden dat dat het probleem is. Kijk of je pad wel goed staat naar het plaatje en of hij bestaat http://java.sun.com/j2se/...ava/io/File.html#exists()

[ Voor 21% gewijzigd door Glimi op 19-09-2003 13:33 ]


  • CyBoB
  • Registratie: Januari 2001
  • Laatst online: 24-12-2025

CyBoB

.::BURB::.

super.paintComponent(g); eerst aanroepen in de paintComponent methode voordat je iets anders gaat tekenen !!

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
CyBoB schreef op 19 September 2003 @ 14:07:
super.paintComponent(g); eerst aanroepen in de paintComponent methode voordat je iets anders gaat tekenen !!
Dat moet iid sowieso ook nog, om de default paint method aan te roepen.

damn, das was ff graven in mijn geheugen

[ Voor 13% gewijzigd door vogeltje op 19-09-2003 14:14 ]

binnenkort een hele dikke casemod :P


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21-08 08:30
Ik ben nog ff bezig geweest en ben er nu aardig uit......
Ik heb nu een plaatje op de achtergrond :) nu heb ik alleen nog twee kleine probleempjes

Hier ff mijn code:
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
public class TextEditor extends Applet 
{
    public void init()
    {
        mainPane = new JLayeredPane();
        mainPane.setPreferredSize(new Dimension(740, 400));
        mainPane.setBounds(0,0,740,400);

        backgroundImage = new ImageIcon(this.getClass().getResource(getParameter("backgroundImage")));

        imageLabel = new JLabel(backgroundImage);
        imageLabel.setBounds(0,0,740,400);

        topPanel = new JPanel();
        topPanel.setPreferredSize(new Dimension(740, 400));
        topPanel.setBounds(0,0,740,400);
        topPanel.setOpaque(false);

        mainPane.add(imageLabel,0);
        mainPane.add(topPanel,1);

        mainPane.moveToFront(topPanel);

        add(mainPane);
    }

    JLayeredPane mainPane;

    JPanel topPanel;

    JLabel imageLabel;

    ImageIcon backgroundImage;
}


Wanneer ik topPanel niet gebruik gaat her goed.... Dan kan ik gewoon buttons ed over het plaatje heen plaatsen.....
Maar ik heb er nu een JPanel over heen gezet en deze transparant gemaakt maar dan zie ik het plaatje niet meer :(

En aan de bovenkant hou ik altijd een randje van ongeveer 10 px waar ik me mateloos aan irriteer.......

In het kort zijn dit dus mijn vragen:
1. Hoe kan het dat ik me plaatje niet meer zie? ... Kan deze construstie die ik nu gebruik wel?
2. Is het mogelijk om het bovenste randje weg te krijgen?

[ Voor 8% gewijzigd door JSchut op 22-09-2003 12:22 ]

PSN jschut_82 | Xbox: JSchut82

Pagina: 1