[Java] JWindow glijdende melding

Pagina: 1
Acties:

  • Hobbles
  • Registratie: Augustus 2004
  • Laatst online: 20-02 20:41
Ik zit met een probleem bij Java, bij het tonen van een JWindow zoals die irritante msn popups. Ik wil dus een melding rechts onder in mijn scherm laten komen bij een bepaalde actie. Het scherm plaatsen is geen probleem.

Wanneer ik echter het scherm wil laten "faden", dus op het beeld laten glijden, dan wordt mijn inhoudspaneel onzichtbaar. Ik denk dat een stukje code kan helpen:
Java:
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
package schermen;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Color;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ConnectieScherm extends JWindow
{
    private static int intHoogte = 150;
    private static int intLengte = 150;
    private JPanel splashPaneel;
    private JLabel lblBericht;
    private Timer tmrTimer;
    
    /**
     * Deze constructor voor het Splash venster aan te maken
     */
    ConnectieScherm()
    {
        buildScreen();
    }
    
    private void buildScreen()
    {
        super.setAlwaysOnTop(true);
        tmrTimer = new Timer(8, new ActionListener()
        {
            Dimension schermgrootte = Toolkit.getDefaultToolkit().getScreenSize();
            int teller = 0;
            public void actionPerformed(ActionEvent evt)
            {
                teller++;
                setBackground(Color.DARK_GRAY);
                setBounds(schermgrootte.width - intLengte,
                        schermgrootte.height - teller,
                        intLengte, intHoogte);
                if(teller == intHoogte)
                {
                    toonScherm();
                    tmrTimer.stop();
                }
            }
        });
        tmrTimer.start();
    }   
    
    private void toonScherm()
    {
        Border raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
        
        splashPaneel = new JPanel();
        splashPaneel.setBackground(Color.DARK_GRAY);
        splashPaneel.setBorder(raisedetched);
        getContentPane().add(splashPaneel);
        lblBericht = new JLabel("<html><CENTER>Verbinding met de <P>database verloren.<P>Opnieuw verbinding <P>maken?</CENTER>");
        Insets insets = getContentPane().getInsets();
        lblBericht.setBounds(insets.left, insets.top, 150,30);
        lblBericht.setFont(new Font("Verdana", Font.ITALIC, 10));
        lblBericht.setForeground(Color.WHITE);
        splashPaneel.add(lblBericht);
        Dimension schermgrootte = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(schermgrootte.width - intLengte,
                schermgrootte.height - intHoogte,
                intLengte, intHoogte);
    }
}


Ik heb na veel proberen nog steeds geen oplossing gevonden. Dus ik hoop dat iemand me hierbij kan helpen.

Everything is possible if you really want it.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

logisch toch...

als je pas toonScherm() aanroept als teller == intHoogte ?

ASSUME makes an ASS out of U and ME


  • Hobbles
  • Registratie: Augustus 2004
  • Laatst online: 20-02 20:41
Mja, dat was dus 1 van mijn vele testjes, als ik toonScherm aanroep voordat ik met het JWindow begin te schuiven lukt het dus ook niet. Het JWindow glijd wel op het scherm gelijk het zou moeten, alleen krijg ik de elementen niet meer te zien die ik zou moeten zien.

Everything is possible if you really want it.


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

CyBoB

.::BURB::.

Naar mijn mening ben je een beetje moeilijk aan het doen en is het vrij simpel. Ik weet dat we hier niet aan kant en klare oplossingen doen, maar ik kon het even niet laten om wat te schrijven:

Java:
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
public class JNotifyWindow extends JWindow implements ActionListener
{
    private Timer glideTimer;
    private Timer removeTimer;
    private int counter;

    public void show()
    {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        DisplayMode d = gd.getDisplayMode();

        this.setLocation(d.getWidth() - this.getWidth(), d.getHeight());

        super.show();

        this.glideTimer = new Timer(8, this);
        this.glideTimer.start();
    }

    public void setVisible(boolean b)
    {
        if(b)
        {
            this.show();
        }
        else
        {
            super.setVisible(b);
        }
    }

    public void actionPerformed(ActionEvent e)
    {
        this.counter++;
        if(this.counter == this.getHeight())
        {
            this.glideTimer.stop();
            this.removeTimer = new Timer(2000, new ActionListener(){
                public void actionPerformed(ActionEvent evt)
                {
                    setVisible(false);
                    removeTimer.stop();
                }

            });
            this.removeTimer.start();
        }
        this.setLocation(this.getX(), this.getY()-1);
    }
}


Zo kan je gewoon deze class subclassen en op het scherm gooien wat je wil en simpel weg aanroepen met:

Java:
1
2
3
new MyNotifyWindow().show();
//of
new MyNotifyWindow().setVisible(true);


Het kan netter allemaal (zoals die actionlistener die door de class wordt geimplementeerd), maar het illustreerd wel hoe je het zou kunnen doen.